"SpirI7wrak" by "An Inform 7 Enthusiast" Volume - Programmer's Guide to the Source Code Part - Introduction to the Source Code Chapter - About This Work [This is an Inform 7 (6G60) port of the game "Spiritwrak", developed by Daniel S. Yu and released under the GPL. The original Spiritwrak was written in Inform 5.5 and consisted of multiple files. "SPIRIT.INF" was the main/primary file, and the others were all included from within it. Translating this work has been a sizable effort, and one of the reasons I'm doing it is to attempt to provide a relatively clean, well-ordered and easy-to-understand example of Inform 7 that demonstrates how to take advantage of many of I7's powerful features. New authors are encouraged to study this source code, experiment with it, and modify it as they see fit. Anyone else interested in converting an Inform 6-era piece of code into Inform 7 may also find it of value -- though likely somewhat less so now that the successor of I7 6G60 has been released. To assist in reconciling this I7 source to the I5.5 original, the organization of this source generally follows the structure of the original source. Each .INF file is given its own Part, and each object is given its own Chapter (for rooms or complex NPCs) or Section (for normal objects). Each Part is labeled with the name of the source file, and each Chapter or Section with the object name of the thing implemented. There is some fuzziness to this mapping, particularly in places where I reorganized the logic of certain aspects of the game, but,on the whole, these tags should let one cross-reference the two sources relatively easily. Parts occur in the same order as the alphabetical order of the name of the source file, i.e. from A.INF to Z.INF. In some situations, objects have been relocated to other Parts because they seem more naturally associated with the action there. Every attempt was made to label these relocated items with comments indicating their original source file.] Chapter - Organization [This source file runs to about 215,000 words with comments included -- it's big. It's therefore laid out in a way that tries to make it as easy as possible to find what you want. The four volumes include: * this introductory section, containing only comments * "Game Mechanics", which contains everything related to the functioning of the game as a whole that is not directly related to those things accessible to the player as things or rooms * "Game Universe", which contains everything that is accessible to the player as things or rooms, including all rules specific to those things or rooms * "Debugging Aids", which contains code that is intended for testing purposes and is not available in the released game To assist in scanning the source pane visually via paging up and down, each heading should have a number of preceding blank lines equivalent to its organizational status: sections get one line, chapters two, parts three, and volumes five.] Chapter - Reading Tips for I7 Beginners [Inform 7 is a large and complex system, and it takes time to learn. Although the built-in documentation is superb, you may be like many (the author included) in that you find it difficult to read through so much when you have so many things you want to do. DO IT ANYWAY. I know you won't, but it's worth it. Even if you just skim, seeing the things that are possible with more advanced techniques will dramatically simplify your efforts to get particular effects. You will undoubtedly ignore that advice, so, to improve the comprehensibility of this code, anything not obvious to someone who understands the basics of thing, room, and rule declarations is cross-referenced to applicable documentation. Regrettably, some of these cross-references may no longer be valid for versions after I7 6G60, but names of sections as well as numbers are provided, and you should be able to track down any that have been moved or renumbered. Frequently, references are made to the Standard Rules by Graham Nelson. This is the core of every I7 program that you write, even though you didn't write it. It is built into I7 and can be found in the list of extensions. As you learn to read I7 code, examining the Standard Rules will give you a lot of insight into how things work "under the covers". There are some places where the source or comments dip down to the world of Inform 6. In those cases, cross-references point to the Inform Designer's Manual, version 4 (aka "DM4"), by Graham Nelson. It is easy to find online. I have tried to maintain consistency of terminology to be as clear as possible, but one item is worthy of special note. The adjectives "held" and "carried" are nearly synonymous in English, but they designate significantly different things in I7. 'Held' (see WWI 8.17 Looking at Containment by Hand) refers to the placement of objects in the underlying I6 object tree (see DM4 section 3.2, p.49 and the rest of Chapter 3 "Objects and Classes"). Thus, many things count as 'held' in I7 that may not be expected, e.g. things in a container are 'held' by it, things on a supporter are 'held' by it, things part of person are 'held' by him, her, or it. In contrast, 'carried' refers specifically to the I7 carrying relation, and means what you think it means. Pay close attention to these words to ensure that you understand the import of certain rules or comments.] Chapter - The IMPDO tags [You will occasionally see comments with the tag "IMPDO". These are notes for possible future expansion that have not yet been implemented. In some cases, this is because there were limits to how much I was willing to modify the function of the original Spiritwrak release 3/960606. In others, it is simply a matter of laziness. Feel free to treat implementation of these as a challenge to the reader.] Chapter - The GPL, Copyright, and You [Like the original Spiritwrak, this work is released under the GNU General Public License. That means it is "free software" in the most liberal sense -- you are specifically given the right to expand or modify this work as you see fit. However, by the terms of the GPL, any derivate work you distribute to others must also offer the same rights. See http://www.gnu.org/licenses/licenses.html for more on this. The above being said, this work (as with the original) constitutes a blatant misappropriation of intellectual property originally created by Infocom. Since fan-produced derivative work has been tolerated by the owner of the Infocom copyrights for decades, there seems to be little danger of legal ramifications for producing it. Please respect this generous forbearance on the part of the copyright owners, and do not create abusive derivative works that may convince them to change this traditional policy.] Volume - Game Mechanics Part - Compiler Options Use MAX_OBJECTS of 1400. Use MAX_PROP_TABLE_SIZE of 520000. Use MAX_STATIC_DATA of 510000. Use MAX_SYMBOLS of 22500. Use MAX_DICT_ENTRIES of 2075. Part - Use Options Use American dialect. Part - Bibliographic Data The story headline is "An Inform 7 Port of Daniel S. Yu's 'SPIRITWRAK'". The story genre is "Fantasy". The story description is "The evil demon Anabais, once conquered by the Ancients, has returned. A lone monk's journey to vanquish the demon takes him on a quest through the world of Infocom's Quendor mythos. (Note: This work is an Inform 7 port of Daniel S. Yu's original, which was released in 1996, with minor enhancements. It is released -- as was the original -- per the terms of the GNU General Public License.)" The story creation year is 2014. The release number is 1. [Dec 18 2014] Part - Extensions Chapter - Plurality Include Plurality by Emily Short. [Thank you, Emily!] Chapter - Unknown Word Error [The following is a slightly modified version of the "Unknown Word Error" extension, which is available for download at the Inform 7 site. A copy should be included along with this source code.] Include Infocom-Style Unknown Word Error by Neil Cerutti. [Thank you, Neil!] Chapter - Easy Achievements [The following is a small and as-yet-unpublished personal extension. A copy should be included along with this source code.] Include Easy Achievements by Otis The Dog. Chapter - Easy Pronouns [The following is a small and as-yet-unpublished personal extension. A copy should be included along with this source code.] Include Easy Pronouns by Otis The Dog. Chapter - GNU General Public License v3 [Note that it was necessary to modify this extension very slightly from the version available at the Inform 7 site, due to a problem in I7 6G60 (see bug #551 at http://inform7.com/mantis/view.php?id=551) The following: Chapter 3 - Releasing the Source Code as Expected [When releasing software under the GPL, it is required that the source code be readily available so that others may modify the work.] Release along with the source text. was changed to: Chapter 3 - Releasing the Source Code as Expected [When releasing software under the GPL, it is required that the source code be readily available so that others may modify the work.] [Release along with the source text.] [disabled to allow release in the form of a blorb file under I7 6G60] This bug has been resolved in I7 6L02 and later versions, so it should not be necessary for you to do the same if building a derivative work.] Include GNU General Public License v3 by Free Software Foundation. [See this extension for the contents of the COPYING file required by the GPL, if you did not receive it separately as part of the materials shipped with this source code.] Suppress GPL author instructions is true. COPYING file included is true. The copyright holder is "Otis T. Dog". The GPL's recommended announcement at startup rule is not listed in the when play begins rules. [to follow the original's style more closely, we want this to appear after the banner but before the initial room description] After printing the banner text (this is the locate GPL announcement after banner text rule): follow the GPL's recommended announcement at startup rule. [adjusted placement] Part - Release Packaging Release along with the source text. [Note: do not remove; required for GPL compliance!] Release along with the library card. Release along with the introductory booklet. Release along with a file of "README file (guide to included materials)" called "README.txt". Release along with a file of "People's Republic of Interactive Fiction's IF-for-Beginners card" called "play-if-card.pdf". Release along with a file of "Inform 5.5 source code for the original 'Spiritwrak' (release 3) by Daniel S. Yu, in compressed ZIP format" called "spiritwrak_r3_I5.5_src.zip". Release along with a file of "COPYING file required by GPL v3" called "COPYING". [Note: do not remove; required for GPL compliance!] Release along with a file of "COPYING file required by GPL v3 (Windows-friendly version)" called "COPYING.txt". Release along with a file of "modified I6 template file for Language.i6t (for oops functionality)" called "Language.i6t.new". Release along with a file of "modified version of Neil Cerutti's Unknown Word Error extension" called "Infocom-Style Unknown Word Error.i7x". Release along with a file of "Easy Achievements, a small personal extension used by this work" called "Easy Achievements.i7x". Release along with a file of "Easy I6-Style Scoring, a small extension used by Easy Achivements" called "Easy I6-Style Scoring.i7x". Release along with a file of "Easy Pronouns, another small personal extension used by this work" called "Easy Pronouns.i7x". Part - Scoring [SPIRITWRAK is considered an "old school" game by current standards, and uses a score. This implementation makes use of some I7 extensions which enable a simple scoring system that emulates the built-in Inform 6 scoring features, including a less fussy version of the built-in but optional "task" system.] Chapter - Room and Object Scoring The universal object score is 2. [Override I6 default from extension.] Chapter - Score Ranking Table of Rankings Score Rank -999 "Wanna-Be Altar-Boy" 0 "Non-Believer" 10 "Devoted" 20 "Aspirant" 30 "Acolyte" 50 "Brother" 75 "Monk" 90 "Priest" 100 "High Priest" 125 "Cleric" 150 "Lama" 200 "Cardinal" 225 "Patriarch" 250 "Enlightened One" [IMPDO - unused rankings found in original source code... [ PrintRank; print ", earning you the rank of "; if (score < 0) "Wanna-be Altar-boy"; ! if (score >= 500) "Truly Enlightened One"; ! if (score >= 495) "Benevolent One"; ! if (score >= 490) "Faithful One"; ! if (score >= 395) "Simple Man"; ! fill fill ]; ] Chapter - Maximum Score (MAX_SCORE) The maximum score is 250. Chapter - Achievements (aka Scoring Tasks) There is an achievement called gaining-traction. The summary of gaining-traction is "using sand to get across the river". The point value of gaining-traction is 2. [ach = 0, confirmed] There is an achievement called cavity-trifecta. The summary of cavity-trifecta is "triplicating the cereal box". The point value of cavity-trifecta is 5. [ach = 1, confirmed] There is an achievement called clock-wiseguy. The summary of clock-wiseguy is "setting the alarm clock". The point value of clock-wiseguy is 5. [ach = 2, confirmed] There is an achievement called waxing-moronic. The summary of waxing-moronic is "getting the waxy scroll from the skier". The point value of waxing-moronic is 5. [ach = 3, confirmed] There is an achievement called royal-bakeoff. The summary of royal-bakeoff is "giving the palace guard a good cake". The point value of royal-bakeoff is 10. [ach = 4, confirmed] There is an achievement called mazemaster. The summary of mazemaster is "solving Barsap's Gambit". The point value of mazemaster is 15. [ach = 5, confirmed] There is an achievement called ship-shape. The summary of ship-shape is "fixing the sailboat". The point value of ship-shape is 5. [ach = 6, confirmed] There is an achievement called green-rod-recovery. The summary of green-rod-recovery is "finding the rod in the shipwreck". The point value of green-rod-recovery is 5. [ach = 7, confirmed] There is an achievement called settling-the-bar-grab. The summary of settling-the-bar-grab is "triplicating the ale". The point value of settling-the-bar-grab is 5. [ach = 8, confirmed] There is an achievement called red-rod-recovery. The summary of red-rod-recovery is "finding the rod under the statue". The point value of red-rod-recovery is 5. [ach = 9, confirmed] There is an achievement called taming-of-the-yew. The summary of taming-of-the-yew is "pruning the Christmas Tree Monster". The point value of taming-of-the-yew is 5. [ach = 10, confirmed] There is an achievement called fan-bypass. The summary of fan-bypass is "getting past the burly sports fan". The point value of fan-bypass is 5. [ach = 11, confirmed] There is an achievement called three-time-champ. The summary of three-time-champ is "winning the three Golem bouts". The point value of three-time-champ is 10. [ach = 12, confirmed] There is an achievement called peacemaker. The summary of peacemaker is "ending the kobold war". The point value of peacemaker is 10. [ach = 13, confirmed] There is an achievement called grand-theft-memento. The summary of grand-theft-memento is "unlocking Duncanthrax's trophy chamber". The point value of grand-theft-memento is 10. [ach = 14, confirmed] There is an achievement called mastermind. The summary of mastermind is "unlocking the lab door". The point value of mastermind is 5. [ach = 15, confirmed] There is an achievement called silver-rod-recovery. The summary of silver-rod-recovery is "finding the rod in the top of the marker". The point value of silver-rod-recovery is 5. [ach = 16, confirmed] There is an achievement called brown-rod-recovery. The summary of brown-rod-recovery is "finding the rod in the house foundation". The point value of brown-rod-recovery is 5. [ach = 17, confirmed] There is an achievement called heavenly-hacker. The summary of heavenly-hacker is "removing the impenetrable steel wall". The point value of heavenly-hacker is 10. [ach = 18, confirmed] There is an achievement called rodmaster. The summary of rodmaster is "joining the True Rod". The point value of rodmaster is 10. [ach = 19, confirmed] There is an achievement called contrarian-at-the-gates. The summary of contrarian-at-the-gates is "getting past the broken subway gate". The point value of contrarian-at-the-gates is 5. [ach = 20, confirmed] There is an achievement called trailblazer. The summary of trailblazer is "finding the hidden path to the temple". The point value of trailblazer is 5. [ach = 21, confirmed] There is an achievement called temple-traversal. The summary of temple-traversal is "getting the rod through the temple". The point value of temple-traversal is 10. [ach = 22, confirmed] There is an achievement called what-scrolls-may-come. The summary of what-scrolls-may-come is "finding the scroll in Frobar's painting". The point value of what-scrolls-may-come is 1. [ach = N/A] There is an achievement called pin-the-scroll-on-the-frumpy. The summary of pin-the-scroll-on-the-frumpy is "getting the scroll from the boutique". The point value of pin-the-scroll-on-the-frumpy is 5. [ach = 23, confirmed] There is an achievement called gift-of-the-mad-guy. The summary of gift-of-the-mad-guy is "getting the scroll from Frobar". The point value of gift-of-the-mad-guy is 5. [ach = 24, confirmed] There is an achievement called tunnel-trawler. The summary of tunnel-trawler is "getting into the subway tunnel". The point value of tunnel-trawler is 5. [ach = 25, confirmed] There is an achievement called saving-the-day. The summary of saving-the-day is "banishing the four evil elementals". The point value of saving-the-day is 10. [ach = 26, confirmed] [ PrintTaskName ach; switch (ach) { 0: "using sand to get across the river"; 1: "triplicating the cereal box"; 2: "setting the alarm clock"; 3: "getting the waxy scroll from the skier"; 4: "giving the palace guard a good cake"; 5: "solving Barsap's Gambit"; 6: "fixing the sailboat"; 7: "finding the rod in the shipwreck"; 8: "triplicating the ale"; 9: "finding the rod under the statue"; 10: "pruning the Christmas Tree Monster"; 11: "getting past the burly sports fan"; 12: "winning the three Golem bouts"; 13: "ending the kobold war"; 14: "unlocking Duncanthrax's Trophy chamber"; 15: "unlocking the Lab door"; 16: "finding the rod in the top of the marker"; 17: "finding the rod in the house foundation"; 18: "removing the impenetrable steel wall"; 19: "joining the True Rod"; 20: "getting past the broken subway gate"; 21: "finding the hidden path to the temple"; 22: "getting the rod through the temple"; ! 23: "finding the scroll in Frobar's painting"; 23: "getting the scroll from the boutique"; 24: "getting the scroll from Frobar"; 25: "getting into the subway tunnel"; 26: "banishing the four evil elementals"; ! add, if desired } ]; [Array task_scores -> 2 5 5 5 10 15 5 5 5 5 5 5 10 10 10 5 5 5 10 10 5 5 10 5 5 5 10; ] Part - General Rules Chapter - Emulating Inform 6 Conventions Section - A note about changes to the event model [In Inform 6, objects had a before property that functioned very similarly to the instead rules of I7. In general, all such functionality is translated to instead rules unless otherwise noted. The same holds true for the few cases where the original code makes use of the react_before property. Functionality handled by the I6 react_after property is universally translated into I7 after rules, unless otherwise noted. Also note that certain "multi-stage" events in I6 would allow specification of rules for both ends of the action, e.g. for the case of putting a quill into an inkpot, one could define a before rule with the Insert action on the quill and a before rule with the Receive action on the inkpot. Since the I7 architecture allows defining the complete event (i.e. Instead of inserting the quill into the inkpot..."), important logic found in objects in the original is sometimes elsewhere in the code. I've tried to note the relevant relocation whenever it seems important (and I remember to do it).] Section - Change in the handling of articles [The handling of definite and indefinite articles I7 is much improved compared to I6; the compiler makes educated guesses about what is appropriate for each thing defined based on the articles used by the author. In practice, this means that most objects with an I6 'article' property defined in the original source code do not need any specific I7 "code" to create the same behavior. No mention will be made of the change in handling for basic usage such as defining "an" as the indefinite article.] Section - Unimportant things [In Inform 6, authors were encouraged to include, as part of the name array for a room object, the names of irrelevant nouns mentioned as part of the room description. (See pp. 106-107 of "The Inform Designer's Manual," fourth edition -- aka "DM4".) The game would then automatically let players know that the object did not require their attention by informing them that they don't need to refer to it (see below). In the source code package I received, which is labeled as release 3 internally but which Mr. Yu warns may be out of sync with the IF archive's compiled version, many nouns in room descriptions are handled in this way. However, most of the time the release 3 version of the game file found in in the IF archive seems to respond as though words listed as part of the name of a room are unimplemented objects -- though in some cases they appear to be implemented as "plain" objects instead. It is not clear whether this is because a) the compiled version in the archive was built from a later, lost version of the source code which removed these synonyms, b) the source code was updated (without changing the release number) since the compiled version in the archive was last updated to add these synonyms, or c) the conventions of Inform 5.5 were slightly different than those in Inform 6. This implementation honors default Inform 6 behavior and the room synonyms in the source code version I received.] A thing can be unimportant. Instead of doing something when the noun is an unimportant thing or the second noun is an unimportant thing (this is the pretend we are I6 for synonyms of room objects rule), say "That's not something you need to refer to in the course of this game." Section - Fake Can't Go That Way Rule [The 6G60 Standard Rules do not allow the connections of doors to be changed very easily, making it more difficult to keep the world model in line with the ostensible current state. There are several places in the game where it is desirable to pretend that a given direction is not valid even when the Standard Rules decide it is. To simplify maintenance of faked library messages for movement in the event of changes to default library messages, a single rule is created here that is called in all such instances.] This is the fake can't go that way rule: say "You can't go that way."; rule fails. Section - Transparency (for Things versus People) [The I6 convention was to treat everything as the same type of "object" and to rely on the library's handling of various standard attributes (the things objects could "have", e.g. "Object BrightRoom has light;" or "Object Shopkeeper has animate;") to determine what type of object it was. Although this is still going on "under the covers," in the I7 paradigm the world of objects is divided into "kinds" that interact according to "rules" and "relations." (The I7 paradigm instead formalizes the various relations and makes them explicit within the world-model. This is really a lot more brilliant and revolutionary than it seems at first.) In I6, an object placed on the tree of another object (e.g. a bump that was child to a log, or a sack that was child to a leprechaun, or a chalice that was child to a table) would be interpreted by the library according to the implicit relation between them given the various attributes attached to the parent object. To use the same examples, the bump would be considered part of the no-special-attribute log, the sack would be considered carried by the "animate"-attributed leprechaun, and the chalice would be considered on top of the "supporter"-attributed table. Importantly, though the library would by default allow the player object to see and touch the chalice due to the rules of supporters, the author had to declare the "transparent" attribute on the log and leprechaun, if the PC was to be able to see/touch the bump or the sack, respectively. All of the above is a roundabout way of explaining that, by default, all things and people are treated as the equivalent of having the "transparent" attribute formally declared, and there is a new subset of rules around the "concealed possessions" of a person or thing (akin to "concealed components" in the latter case). See WWI 17.9 for details. This default setting works well in the world of things, where generally the author wants the player to be able to reach all of a thing's parts and it's easy to forget to declare transparency. It's not as automatically beneficial in the case of people, where the typical need is to conceal at least some things worn or carried by an NPC -- though it is superbly easy to create exceptions in I7 compared to what it took in I6. In general, here all things can be assumed to be 100% "transparent" unless otherwise noted. The following rules invert that assumption for CARRIED objects of people (but NOT worn items or parts of the person) unless given the "open-inventoried" property, because it seems more likely that non-transparent behavior for carried things would match the original expectations, but this implementation adds some detail objects to many animates that are mentioned in their original description, and so should be presumed visible. Of course, due to I7's specificity-dependent rule ordering, it should be possible to override this general rule any time for specific people, if more nuanced treatment is desired.] A person can be open-inventoried or closed-inventoried. A person is usually closed-inventoried. Rule for deciding the concealed possessions of a person (called bearer) (this is the emulate default non-transparent attribute for I6 animates rule): if the bearer is open-inventoried: decide no; [as in, no, it's not concealed] otherwise: if the particular possession is carried by the bearer: decide yes; [as in, yes, it is concealed] otherwise: [i.e. worn or part of the bearer] decide no. [Note that the following rule's function depends on the irregular behavior of examining -- namely, that it prints text as part of its "carry out" rules instead of its "report" rules. Thus, the after rule here won't suppress the normal response. An alternate approach, if needed, would be to create this as a report rule that invoked the normal report examining rule as part of its function.] After examining an open-inventoried person (called possessor) while the noun carries something that is unmentioned (this is the mention visible possessions of people when describing them rule): if the possessor is the player: do nothing; otherwise: say "[Capitalized subject pronoun of the possessor] [if the possessor is singular-named]carries[else]carry[end if] [a list of unmentioned things carried by the possessor]." [After testing the above rule, it was discovered that in the 6G60 Standard Rules, things can get stuck in the "mentioned" state for multiple turns, resulting in repeated examinations leaving carried items unlisted after the first mention. The following rule compensates.] Last every turn (this is the make sure local things don't get stuck in mentioned state rule): now every local thing is unmentioned. Section - Life property [The intent of this section is to allow emulation of the I6 'life' routine -- particularly the ability to create a default response for one of several actions specially treated by this routine. I7 does not give any special treatment to these actions by default, but it is possible to simulate this. The biggest problem with the approach taken here is that, since the precise action is undefined and identified only by its "generic life behavior" kind, the rules associated with it must go into the "Instead" rulebook. This means any such rule will take precedence over any "Check" or "After" rules for specific actions that qualify as generic life behavior. Thus, to override the generic, a special-purpose, higher-precedence "Instead" rule must be crafted, and the burden of handling the action "all the way through" is on that one rule. There is probably a more robust way to handle this type of emulation, but this author certainly hasn't thought of it yet.] Attacking or kissing or waking is generic life behavior. Throwing something at is generic life behavior. Giving something to is generic life behavior. Showing something to is generic life behavior. Asking something about is generic life behavior. Telling something about is generic life behavior. Answering something that is generic life behavior. [Another wrinkle is that the following declaration is prohibited in 6G60: Asking someone to try doing something is generic life behavior. This is important, as in I6 certain portions of the 'Life()' routine will be invoked in certain cases (see p. 139 of "The Inform Designer's Manual," fourth edition) -- namely: 1) if the order given to an NPC is understood by the parser but not handled by the actor object's 'Orders()' routine, and there is an Order action section in the actor object's 'Life()' routine, that section will get a chance to intervene, and if it does not the Life() routine's default (if present) will apply, and 2) if the order given to an NPC is NOT understood by the parser and is not handled by the actor object's 'Orders()' routine and there is an Answer action section in the actor object's 'Life()' routine, that section will get a chance to intervene, and if it doesn't, the Life() routine's default (if present) will apply. Fortunately, for case #2 above, the automatic conversion of the command into an "answering it that" action will be handled by rules attached to "generic life behavior". However, in I7, for case #1 the closest we can get is via an actor's persuasion rules. (See"Writing With Inform" 6G69 section 12.4) The author did not discover any way to automatically route unsuccessful persuasion attempts to the appropriate generic life behavior rule, so here this is handled ungracefully via installation of specific persuasion rules for each NPC.] Section - Use of I6 'cant_go' messages [In Inform 6, authors could set a property for room objects called 'cant_go', which would be displayed (if a string) when the player tried to go in a direction for which no room connection was specified. No precise counterpart exists in I7, so various forms of "Instead of going..." rules are set up as appropriate. Details of this type of conversion are not mentioned in individual object notes. In some cases, multiple rooms with the same 'cant_go' property string in the original source code have been added to a defined region, with a single region-based rule to cover them all.] Section - "Objects" and "Places" verbs Listing visited locations is an action out of world. Understand "places" as listing visited locations. Report listing visited locations (this is the default response for I6 places verb rule): say "You have visited: [list of visited rooms]." Listing handled objects is an action out of world. Understand "objects" as listing handled objects. Report listing handled objects (this is the default response for I6 objects verb rule): if the number of handled things is zero: say "You haven't handled anything yet."; otherwise: say "Objects you have handled:[paragraph break]"; repeat with handlee running through handled things: say "[the handlee] ([vicinity of handlee])[line break]". To say vicinity of (item in question - a thing): if the player wears the item in question: say "worn"; otherwise if the player carries the item in question: say "held"; otherwise if the item in question is enclosed by a person that is not the player: say "given away"; otherwise if the item in question is off-stage: [must be ahead of next condition, or shows "nothing"] say "lost"; otherwise if the holder of the item in question is the location of the item in question: say "[location of the item in question]"; otherwise if the holder of the item in question is an open container: say "in [the holder of the item in question]"; otherwise if the holder of the item in question is a closed container: say "inside [the holder of the item in question]"; otherwise if the holder of the item in question is a supporter: say "on [the holder of the item in question]"; otherwise: say "". Section - Lookmode [The following is stolen directly from WWI 25.21, with thanks to whomever authored it. It was used in some early drafts of the scene logic for the "Planting the Rod.." scenes, but turned out not to be necessary to emulate release 3/960606. It's left here mostly as a pointer to the concept of lookmodes, which are still available to players in I7-created works.] Room description style is a kind of value. The room description styles are Brief, Verbose and Superbrief. The current room description style is a room description style that varies. The current room description style variable translates into I6 as "lookmode". Section - Afterlife [I6 allowed authors to include a special routine called Afterlife() that would enable doing various things in the event of PC death. See the Inform Designer's Manual version 4 section 21 for more information. This feature is not mentioned at all in WWI (at least the 6G60 version), presumably because the died/won dichotomy implicit in I6 has been superseded with a model of simply having different ways to end the story. The equivalent functionality is provided by the "When play ends" rulebook.] Definition: A thing is left behind when transported if it is carried by the player or it is worn by the player. When play ends when the story has not ended finally (this is the I6 Afterlife equivalent rule): if the resurrections remaining of the player is at most zero: say "[line break]A blackness surrounds you, replaced by more blackness...[paragraph break]"; continue the action; otherwise: if the location provides the property special item destination: now everything that is left behind when transported is in the special item destination of the location; otherwise: now everything that is left behind when transported is in the holder of the player; if the resurrections remaining of the player is at least 1: disengage spell blocking; say "[line break]A blackness surrounds you, only to be replaced by...[paragraph break]"; let h be a random number between 1 and 4; if h is: -- 2: now the player is in Hades Two; -- 3: now the player is in Hades Three; -- otherwise: now the player is in Hades One; resume the story. Section - DarkToDark [I6 allowed specification of a special routine called DarkToDark() to govern what happens when players try to move around in darkness. See the Inform Designer's Manual version 4 section 19 for more information. It might seem like a straightforward rule preamble would cover the same function in I7, but it's not enough to just check whether the rooms are dark -- one must check that they are not lighted by another thing, which took some delving into the 6G60 Standard Rules to devise. Since the frotz spell is always available, darkness should not be an actual threat to the player. I added some more flavor to the transition message and decreased the frequency of being eaten. Those interested in obtaining the original behavior can change the eaten-by-grues cutoff from "i is at most 6" to "i is less than 4".] To decide whether (X - a thing) radiates-at-large: if X is not lit: decide no; otherwise: let radiant-range be the visibility-holder of X; while radiant-range is not the location of X: [check for intervening barriers to visibility between X and room] if radiant-range is a closed opaque container: decide no; now radiant-range is the visibility-holder of radiant-range; decide yes. To decide whether (R - a room) is completely-unlighted: repeat with illumination candidate running through lit things enclosed by R: if illumination candidate is not born by the player and illumination candidate radiates-at-large: [ say "([illumination candidate] lights [R])";] decide no; [ say "([R] is completely-unlighted)";] decide yes. To decide whether brought light is totally lacking: let portable light source be a random lit visible thing that is born by the player; [ say "(portable light source = [portable light source])";] if portable light source is not nothing: decide no; otherwise: decide yes. After going from a dark room to a dark room when the room gone from is completely-unlighted and the room gone to is completely-unlighted and brought light is totally lacking (this is the grues are no joke rule): let i be a random number from 1 to 10; if i is at most 6: say "[first time]Hmm, perhaps the grues really are migrating with the Great Change. [only]You stumble blindly into another place[one of][or], praying that that slavering sound is just in your imagination[or], hoping that nothing dangerous lurks nearby[at random]..."; continue the action; otherwise: say "Well, don't say I didn't warn you. Something horrible with slavering fangs lurks up and devours you!"; end the game in death. Section - Verb_Word and Verb_WordNum [I6 allowed a lot more direct access to parser activity than I7 does, and this is relevant to certain targeted elements of functionality within the "Balances"-style implementation of the Infocom-style spellcasting syntax, which is used in "Spiritwrak". Some minimal delving into the I6 layer is required to enable these functions.] To decide what indexed text is the word at position (N - a number) of the command: decide on word number N in the player's command. To decide which number is the verb word number: (- (verb_wordnum) -) To decide which indexed text is the verb word: let w be indexed text; let w be punctuated word number verb word number in the player's command; decide on w. Section - Room and inventory description detail for empty containers [Spiritwrak 3/960606 suffixes empty containers in room descriptions with "(which is empty)" instead of just "(empty)" and "(which is closed)" instead of "(closed)". Likewise, when taking inventory the descriptions are "(which is open but empty)" or "(which is closed)"] Definition: A container is visibly-empty if it is open and it is empty. Rule for printing room description details of a visibly-empty container (this is the add which is prefix to empty containers in room descriptions rule): say " (which is empty)". Rule for printing room description details of a closed container (this is the add which is prefix to closed containers in room descriptions rule): say " (which is closed)". [The following took some experimentation to get right, since it involved delving into the Standard Rules and then onto the DM4 (Chapter 27 "Listing and grouping objects", starting at p. 201). The origin of the "omit only full inventory information in listing" phrase is described in more detail in the section titled "Plastic Wrapper." The sister phrase "restore only full inventory information in listing" was created to allow normal listing of the contents of the container.] To omit only full inventory information in listing: (- c_style = c_style &~ (FULLINV_BIT); -). After printing the name of an open openable empty container while taking inventory (this is the add which is prefix to open openable and empty containers in inventory list rule): say " (which is open but empty)"; omit only full inventory information in listing. [suppress normal parenthetical description] After printing the name of an open unopenable empty container while taking inventory (this is the add which is prefix to open unopenable and empty containers in inventory list rule): say " (which is empty)"; omit only full inventory information in listing. [suppress normal parenthetical description] After printing the name of an open openable not empty container while taking inventory (this is the add which is prefix to open containers in inventory list rule): say " (which is open)"; omit only full inventory information in listing. [suppress normal parenthetical description] After printing the name of a closed openable container while taking inventory (this is the add which is prefix to closed containers in inventory list rule): say " (which is closed)"; omit only full inventory information in listing. [suppress normal parenthetical description] To restore only full inventory information in listing: (- c_style = c_style | (FULLINV_BIT); -). Before printing the name of something in an open container while taking inventory (this is the restore inventory details after replacement suffix completed rule): restore only full inventory information in listing; make no decision. Section - Inventory Tall and Wide [Commands "inventory tall" and "inventory wide", see DM4 p. 202, confirmed working in release 3/960606. Command settings are sticky and define subsequent responses to "i". Note that the way nested containers are handled in "wide" mode is not totally satisfactory with respect to making it clear what the boundaries of "inner" container contents lists are, but the output produced is the normal I6-style as seen in release 3/960606.] An inventory mode is a kind of value. The inventory modes are tall and wide. The current inventory style is an inventory mode that varies. The current inventory style is tall. Taking style-specific inventory is an action applying to one inventory mode. Understand "inventory [inventory mode]" as taking style-specific inventory. The taking style-specific inventory action has an inventory mode called the requested inventory mode. This is the print tall-format inventory rule: follow the print standard inventory rule. [this is default format in I7 6G60] This is the print wide-format inventory rule: [modification of Standard Rules' "print standard inventory" rule] issue library message taking inventory action number 2; say " "; list the contents of the player, as a sentence, including contents, giving inventory information; say "." Setting action variables for taking style-specific inventory (this is the identify requested inventory style rule): now the requested inventory mode is the inventory mode understood. Check taking style-specific inventory (this is the set inventory mode per request rule): if the requested inventory mode is: -- wide: now the current inventory style is wide; -- tall: now the current inventory style is tall; -- otherwise: do nothing. Last check taking style-specific inventory (this is the standard style-specific inventory rule): try taking inventory instead. Carry out taking inventory (this is the replacement standard inventory rule): if the current inventory style is: -- wide: follow the print wide-format inventory rule; -- tall: follow the print tall-format inventory rule; -- otherwise: say " ask scientist about rockets > tell guard about bandits work more or less as a new player would expect, the Answer action (triggered by the verb "say") does not. If a player types: > say "hello" to giant duck the parser creates a topic with three 'words' in it, because each punctuation mark (i.e. double-quote mark) is given its own word in the internal word array and parse array. Although this can be handled, it is a serious annoyance. WWI 17.31 offers a relatively simple example of how to modify player commands in I7. The following experiment, modeled after it and using the regular expression replacement functionality described in WWI 19.8, tries to "translate" what the player entered to make it more easily handled on the programming side with a single topic. This rule will do nothing unless the player uses a keyword] After reading a command (this is the restructure player's command to streamline vocal verbs rule): [ say "(checking for verbalizing actions)[line break]";] let z be the number of times the player's command matches the regular expression ".*(answer|say|shout|speak|reply|respond)\s+(\[apostrophe]|\[quotation mark]).*\2"; if z is at least one: let replacement-command be indexed text; let replacement-command be the player's command; [ say "(verbalizing action: input command = [replacement-command])[line break]";] replace the regular expression "(\[apostrophe]|\[quotation mark])(<^\!\?>*)(\!|\?)*\1" in replacement-command with "\2"; [the term (<^\!\?>*)(\!|\?)* can be replaced with (.*) if you don't want to strip final question or exclamation marks] [ say "(excess punctuation removed: output command = [replacement-command])[line break]";] change the text of the player's command to replacement-command; let z be the number of times the player's command matches the regular expression ".*(answer|say|shout|speak|reply|respond)\s+(\w+)(\?|\!)"; if z is at least one: let replacement-command be indexed text; let replacement-command be the player's command; replace the regular expression "(\w+)(\?|\!)" in replacement-command with "\1"; [trim question mark or exclamation even if no quotes used] change the text of the player's command to replacement-command. [IMPDO - convert the above to an extension? need to make it generic enough to allow author to specify all bonus verbs that it would apply to over the I7 defaults of answer, say, shout, and speak. define "vocal" actions?] Section - Understanding object pronouns [The intent here is to allow more natural commands such as ">ask brother joseph about himself". The effect is quite crude currently - it would be much preferred to be able to be more specific about the specifics of the usage, e.g. for "himself" to insist that the noun is already defined as a man, or that the thing being matched is the same as that referred to by the standard parser pronoun "him". However, the way these function relies on the somewhat mysterious "item described", which has a function in the understanding process that is not well-documented. The 6G60 Standard Rules show that this maps to the object-oriented programming "self" concept in the I6 layer, which is a hint, but not enough for this author to solve the puzzle. It would be nice to have more documentation of how core parser operations work in I7.] Understand "himself" as a man when the item described is a man. Understand "herself" as a woman when the item described is a woman. Understand "people" as a person when the item described is plural-named. Section - Mass nouns [Perhaps not the most elegant system, but creating this property will handle some grammar details for certain things that the author often forgets to attend to.] A thing can be mass-nouned. First when play begins (this is the set grammar properties for mass-nouned things automatically rule): repeat with subject running through mass-nouned things: now the subject is singular-named; now the indefinite article of the subject is "some". Section - Unique nouns [Similar to the case of mass nouns above, this property allows certain things to have grammar details automatically enforced if the thing is tagged correctly during creation. It is to handle cases like "the River Phee" or "the Gray Mountains", which have a proper name but also require "the" as an article. This tag can also be used for things like "the spotted windcat's neck" or "the museum floor", which are not necessarily globally-unique but which are specific enough to be generally referred to with the definite article, i.e. "Let's go to the beach!" The most expedient way to handle this is to simply redefine the object as improper-named and enforce "the" as even the indefinite article. This is not anticipated to be a problem, since the proper-named property is typically only used by the Standard Rules.] [IMPDO - set up "To say The/the (S - a uniquely-named object):" phrases, so that proper-named property can be preserved -- will conflict with Standard Rules? would then need to divorce contextually-named things as separate property?] A thing can be uniquely-named. When play begins (this is the use a definite article for even proper-named unique things rule): repeat with subject running through uniquely-named things: now the subject is improper-named; now the indefinite article of the subject is "the". The use a definite article for even proper-named unique things rule is listed after the set grammar properties for mass-nouned things automatically rule in the when play begins rules. Section - Positional context [WWI 16.16 Understanding Things by Their Relations does not elaborate on the power possible if the examples given are generalized. Note that this can cause some player confusion when the word "in" is used instead of "into", e.g. ">put coin in basis vault" when there is a coin already in the basis vault is read as an incomplete command. ATTENTION! These understand lines cause what may be unusual behavior by conventional standards, because they create ambiguity for the phrase "X in/on Y", i.e. ">put book on shelf" when there is a book on the shelf and a book in inventory becomes a more challenging situation for the parser. However, at least in 6G60, it will correctly interpret a command like ">put book on shelf in sack" or "put held book on shelf" as needed.] Understand "on top of [something related by reversed support]" or "atop [something related by reversed support]" as a thing when the item described is on a supporter. Understand "located in [something related by reversed containment]" or "within [something related by reversed containment]" as a thing when the item described is in a container. Understand "held" or "carried" as a thing when the item described is visible and the item described is enclosed by the player. Understand "here" or "discarded" as a thing when the item described is a portable thing in the location. [I'm not sure why, but the parser won't match to the built-in rules for the following actions which have very similar grammar. Best guess is that the specification of a "[other things]" syntax (which translates at the I6 level into a multiexcept grammar token, see DM4 p. 222 for more on the difference) is not getting cooperation from the relevant understand lines. The output produced when these grammar lines are used is not as clean-looking, but it seems to function.] Understand "put [things] in/inside/into [something]" as inserting it into. Understand "put [things] on/onto [something]" as putting it on. Positional context understanding advertised is a truth state that varies. When play begins (this is the set positional context advertisement flag to false rule): now positional context understanding advertised is false. To explain position context keywords: say "[line break][italic type][bracket][bold type]ATTENTION![italic type] As an experimental feature, SpirI7wrak offers the ability to refer to things based on their 'positional context', i.e. where they are with respect to containers (something in which things can be placed, like a bucket) and supporters (a surface on which things can be put, like a table).[paragraph break]The terms 'within' and 'located in' refer to something in a container (though 'in' does [bold type]not[roman type], to prevent ambiguity) , and 'atop' and 'on top of' refer to something on top of a supporter (though 'on' does [bold type]not[roman type]). Thus, commands like '[roman type]>TAKE CHEW TOY ATOP GRUE'S NOSE[italic type]' (where there are other chew toys present) or '[roman type]>PUT TWO DOUBLE FANUCCI CARDS WITHIN SLEEVE ON DECK ATOP HIGH ROLLERS TABLE[italic type]' (where there are cards and decks in several places in the location) are legitimate and should be understood by the parser.[paragraph break]In a similar manner, the terms 'held' or 'carried' refer to items in your inventory, and 'here' and 'discarded' refer to items in the location but not in or on something else. Thus commands like '[roman type]>ATTACK CARRIED GARDEN GNOME[italic type]' (while surrounded by a horde of them) or '[roman type]>PUT GOLD NUGGETS HERE IN LOOT SACK[italic type]' (while already carrying two nuggets) should also be understood. These may be handy if the parser doesn't understand your intent, but please report any problems you encounter to the author.[close bracket][roman type][paragraph break]"; now positional context understanding advertised is true. Before inserting something into something when positional context understanding advertised is false (this is the advertise positional context on first inserting it into action when applicable rule): explain position context keywords. Before putting something on something when positional context understanding advertised is false (this is the advertise positional context on first putting it on action when applicable rule): explain position context keywords. Section - Compensating for an oops with "oops" [There appears to be a small flaw with the low-level function of the oops command, and this is not corrected even in 6L38. Since there are no guarantees on the timing of releases, this is an attempt to work around that.] [Note that the code in this section depends on folder Materials/I6T containing a modified Language.i6t file! The only modification is to redefine three I6 constants used by the parser (OOPS__WD1, OOPS_WD2, OOPS__WD3) to an unlikely combination of letters, so that deep parser function will not pre-empt the I7-level rules here.] Complete previous command is indexed text that varies. Previous non-dictionary word position is a number that varies. To decide which number is oops-from: (- (oops_from) -) To decide which number is match-length: (- (match_length) -) Before reading a command (this is the store previous command for oops functionality rule): now complete previous command is the player's command; now previous non-dictionary word position is the position of the non-dictionary word; [from Infocom-Style Unknown Word Error extension] [ say "(prev command = [complete previous command])[line break]";] do nothing. First after reading a command (this is the alternate oops functionality rule): let oops-synonyms be a list of indexed texts; let oops-synonyms be {"oops", "o"}; if punctuated word number 1 in the player's command is listed in oops-synonyms: [ say "(oops detected)[line break]";] if oops-from is zero: [ say "(no apparent error in last command)[line break]";] issue miscellaneous library message number 14; rule fails; [IMPDO - can get this to work even for replacing first word?] if punctuated word number 2 in the player's command is empty: [ say "(no replacement word)[line break]";] issue miscellaneous library message number 15; rule fails; if the number of punctuated words in the player's command is greater than 2: [ say "(too many words provided for oops)[line break]";] issue miscellaneous library message number 16; change the text of the player's command to complete previous command; [allow second try] rule fails; if punctuated word number 2 in the player's command is not empty: [ let target-word-position be oops-from plus match-length;] let target-word-position be previous non-dictionary word position; [ say "(prev command = [complete previous command])[line break]";] [ say "(replacement word = '[punctuated word number 2 in the player's command]')[line break]";] [ say "(replacement target = '[punctuated word number target-word-position in complete previous command]'[line break]";] let targeted-word be indexed text; let targeted-word be word number target-word-position in the complete previous command; replace the regular expression "\b[targeted-word]\b" in complete previous command with "[punctuated word number 2 in the player's command]"; [ say "(planned command after 'oops' replacements is '[complete previous command]')";] change the text of the player's command to complete previous command; [ say "(revised command = [player's command])[line break]";] otherwise: [ say "(no oops, first word = [punctuated word number 1 in the player's command])";] do nothing. Section - Letting implicit takes mark something as handled [In 6G60 standard rules, it is possible to handle an item without it becoming handled, if an action that requires a held item executes an implicit take but then also causes that item to leave inventory when successful, e.g. eating. This corrects that, to fix a bug that can occur with the wire in the dusty box if the player uses the zombie to remove it then immediately places it back into the box.] First carry out taking something (this is the ensure implicitly-taken things are marked as handled if successful rule): if the noun is not handled: now the noun is handled; continue the action. Chapter - New Kinds of Value Section - Doneness A doneness is a kind of value. The donenesses are underdone, done, and overdone. Section - Essential Nature, the kind of value [Motivated by the desire to create a generic response for throcking plants that have no specific after rule.] An essential nature is a kind of value. The essential natures are mineral-like, animal-like, vegetable-like, fungus-like, and immaterial. Section - Foldedness A foldedness is a kind of value. The foldednesses are underfolded, properly folded, and overfolded. Section - Hue [Note that the short color list here is driven by the limited number of GUS subway lines in the original. A comprehensive treatment of color for all things would be interesting but it's potentially a lot of work that isn't necessary here. Perhaps a future story.] A hue is a kind of value. The hues are purple, green, and orange. Section - Oven Setting [Note that the original source code had a setting called "Cake", but this implementation replaces it with "Baked Goods" because I7 6G60 seems to be confusing the oven setting 'Cake' with the thing 'cake' in the conditional structures of the thing cake's description text.] An oven setting is a kind of value. The oven settings are Warm Soup, Hot Chocolate, Pizza, Baked Goods, Fish, Roast Chicken, Baked Potato, Rib Roast, and Thermonuclear Flash. [Some synonyms for oven settings to make it easier to turn to a specific setting.] Understand "soup" as Warm Soup. Understand "chocolate" or "cocoa" as Hot Chocolate. Understand "bake" or "baking" or "cake" as Baked Goods. Understand "chicken" or "poultry" as Roast Chicken.. Understand "potato" as Baked Potato. Understand "rib" or "ribs" or "roast" as Rib Roast. Understand "nuke" or "nuclear" or "thermo" or "thermo-nuclear" or "flash" as Thermonuclear Flash. Section - Relative Position [Note: This kind of value is not really needed from a functional sense; it's a leftover of an early attempt to implement the lab door puzzle. However, it is used in defining the various lab door combination dials, so it is left in as an example of understanding things by their properties -- a powerful feature of I7 (see WWI 16.15).] A relative position is a kind of value. The relative positions are left, center, and right. Understand "middle" as center. Section - Upheaval An upheaval is a kind of value. The upheavals are inert, faint, moderate, severe, peak and complete. Chapter - New Properties Section - Absent A thing can be absent. Instead of doing something with an absent thing (called missing item) (this is the can't interact with absent things rule): say "There [if the missing item is singular-named]is[else]are[end if] no [missing item]." When play begins (this is the allow more elegant declarations of absent things but don't forget to make them invisible rule): now every absent thing is scenery. Section - Cuttable A thing can be cuttable. A thing is usually not cuttable. Section - Essential Nature, the property A thing has an essential nature. The essential nature of a thing is usually mineral-like. The essential nature of a person is usually animal-like. Section - Forged / Authentic A thing can be forged or authentic. A thing is usually authentic. Section - Ledak-resistant A thing can be ledak-resistant. Section - Papery A thing can be papery. Section - Size [This property is declared for some objects in original code, but it is frequently commented out. Rather than declare this property on a thing-by-thing basis, it is made a general case of all things, with the definition "unsized" being available to identify those with no specific declaration (i.e. with a size of -1, the default) and "sized" being the inverse.] A thing has a number called size. The size of a thing is usually -1. Section - Watery A container can be watery. Chapter - New Adjectives Section - Animate / Inanimate Definition: A thing is animate rather than inanimate if it is a person. Section - At Hand Definition: A thing is at hand if the player can touch it. Section - Cardinal Definition: A direction is cardinal if it is not up and it is not down and it is not inside and it is not outside. Section - Cereal-Related Definition: A thing is cereal-related if it is cereal or it is a cereal box. Section - Correctly-Set Definition: A combination-dial (called checked tumbler) is correctly set if the current setting of checked tumbler is the target setting of checked tumbler. Section - Empty Definition: A container is empty if it contains nothing. Section - Large and Small Definition: A thing is large if its size is 16 or more. Definition: A thing is small if its size is 7 or less. Section - Local / Non-Local Definition: A thing is local rather than non-local if it is enclosed by the location. Section - Player-Carried Definition: A thing is player-carried if it is carried by the player. Section - Sized / Unsized Definition: A thing is unsized rather than sized if its size is -1. Section - Stashed Out of Sight Definition: A thing is stashed out of sight if it is enclosed by a closed opaque container. Section - Underwater Definition: A thing is underwater if it is in a watery container. Section - Unhandled Definition: A thing is unhandled if it is not handled. Section - Unladen / Laden Definition: A supporter is unladen rather than laden if it supports nothing. Section - Valid Definition: A direction (called checked direction) is valid if the room checked direction from the location is a room. [Recipe Book Ex. 103] Chapter - New Kinds Section - Artwork [This kind does not have a corresponding class in the original source code. It is created to aggregate understand rules to simplify the real/counterfeit painting puzzle.] An artwork is a kind of thing. Understand "real" or "fake" or "genuine" or "counterfeit" or "priceless" or "worthless" as "[authenticity-related adjective]". Understand "painting" or "paintings" or "art" or "artwork" or "artworks" or "canvas" or "canvases" as "[art-related noun]". Understand "[authenticity-related adjective] [art-related noun]" or "[authenticity-related adjective]" or "[art-related noun]" as "[artwork noun phrase]". Understand "[artwork noun phrase]" as an artwork. Section - Binary Reply [Used by "Expectant Pause" utility scene.] A binary reply is a kind of object. A binary reply has some text called positive rejoinder. The positive rejoinder of a binary reply is usually "". A binary reply has some text called negative rejoinder. The negative rejoinder of a binary reply is usually "". Unused binary reply is a binary reply. [sets default value for binary reply kind, since 6G60 won't allow nothing] Section - Book [This kind is a late addition, mostly to allow for handling of books as a group by way of assigning a common plural.] A book is a kind of thing. Understand "books" as the plural of a book. Section - Cereal (cereal_class) Cereal is a kind of thing. The description of cereal is "A quantity of overly-sweetened breakfast cereal." The size of cereal is 8. Cereal is usually mass-nouned and edible. [Note the addition of a small hint about the need to triplicate the cereal box.] After eating cereal (this is the can't have cereal you can't eat now can you rule): say "You consume the cereal[if the royal-blue cereal box has not been on-stage], feeling like you could have eaten three times as much[end if]. The sugar rush occurs five seconds later and ends just as quickly." Section - Cereal Box [Note the use of private naming to disallow use of just plain "cereal" as the name of a cereal box.] A cereal box is a kind of container. A cereal box is always privately-named. A cereal box is usually closed and openable. The size of a cereal box is 10. The carrying capacity of a cereal box is 5. Understand "cereal box" or "box" as a cereal box. Understand "cereal boxes" or "boxes" as the plural of cereal box. Instead of inserting a cereal box into a cereal box (this is the cereal boxes aren't big enough for other cereal boxes rule): say "That doesn't quite fit." Section - Coin (coin_class and c1, c2, c3, c4, c7, c9, c10, c11, c12, c13, c50) [Note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_coin," but, since use of this attribute was exclusively associated with objects of class coin_class, this is deemed unnecessary and omitted here in favor of testing for the coin kind when appropriate. Also note that the original source code specified a plural name for the class, but this handled appropriately and automatically in I7. Finally, note that this class had a defined I6 parse_name routine that, based on looking at the information in "The Inform Designer's Manual v4" section 29, was for two reasons. The first reason is to speed up the identification of coins as being "identical" for description purposes. The second reason is to allow special understanding of the word "coins" as applying to multiple objects from the coin_class without marking it as universally plural in the dictionary (as would occur if putting 'coins//p' in the name array for the class). Neither need seems to be applicable here, so no equivalent logic is defined in this implementation.] A coin is a kind of thing. Understand "coin" as a coin. The size of a coin is usually 1. The description of a coin is usually "A round metal disc, with '1zm' stamped on both sides." Definition: A coin is uncirculated if it is off-stage and it is not in the small cloth bag. [to prevent grabbing off-stage coins from the bag before the player earns it] After casting zemdor at a coin (this is the pennies from heaven rule): say "The coin shimmers! [one of]To your amazement, t[or]T[stopping]he coin splits into three copies of itself. "; if zemdor is forbidden for money: say "With a slight 'pop,' [one of]a financial nymph appears! [or]the financial nymph returns. [stopping] She gives you a[one of] denunciatory[or]n accusatory[or] reproachful[or] severe[or] disapproving[or] grumpy[or] disparaging[or] condemnatory[or]n accusing[at random] look. [one of]'Line 7234-6 of the Pierpont tax laws clearly states that repeated unauthorized triplication of monetary items is strictly forbidden,' [or]'Knock it off, '[stopping] she says, and takes the the two newly created coins before disappearing."; otherwise: move a random uncirculated coin to the holder of the second noun; [first copy] move a random uncirculated coin to the holder of the second noun; [second copy] now zemdor is forbidden for money; say "You notice there are now three coins where there was once but one!" There are 11 coins. [1 for couch in Waiting Room (c1), 1 for governor to give (c2), 1 for fountain in Conservatory (c3), 1 for museum curator when returning painting (c4), 1 for delivery to Market District (c7), 3 for the various subway seats (c9, c10, c11), 2 for casting zemdor on a coin (c12, c13), 1 for turning the granite wall to pasta (c50)] [The following "does the player mean" rule is derived from a code snippet found in the SPIRIT.INF file, labelled in a comment as "Random attempt to code a ChooseObjects for the coin choosing problem". Reviewing the documentation on the 'ChooseObjects()' function from DM4 p. 239 makes it seems that the primary intent was to ensure that the parser gives preference to a held coin when the I6 'action_to_be' was either the I6 Remove action or the I6 Insert action. Since the I6 'in' operator checked only for "immediate" placement in the object tree (i.e. first level down), the inclusion of the I6 Remove action in this list doesn't make a lot of sense, since removing something from the player's hands is not a sensible action. It's possible this is an error on Mr. Yu's part, and that the intent was that for commands like ">remove coin" the parser would give preference to a coin in a container held by the player instead of something in the area (e.g. in a vault). The author of this implementation prefers to err on the side of caution in this case, so only the inserting it into and putting it on actions are handled by the following.] Does the player mean inserting a coin born by the player into something: it is likely. Does the player mean putting a coin born by the player on something: it is likely. [ KEEP - original source code version ! Random attempt to code a ChooseObjects for the ! coin choosing problem often seen in the Bank of Zork [ ChooseObjects obj code; if (code < 2) rfalse; [if the parser is deciding whether to include this in an "all", accept the decision] if ((action_to_be == ##Remove or ##Insert) && (obj has is_coin) && (obj in player)) return 9; [if the action is inserting it into or removing it from, strongly prefer a held coin] return 0; ]; ] Section - "Basic" Dial (dial_class) [The quotes in the name are because "basic" isn't really part of the name, I just wanted to put it in front of the combination-dial kind. ] A dial is a kind of thing. Understand "dial" as a dial. [Understand "dials" as the plural of dials.] [This was not helpful since the plural "dials" is intended to mean the set of dials.] Section - "Basic" Numeric-Dial [The quotes in the name are because "basic" isn't really part of the name, I just wanted to put it in front of the combination-dial kind. Hyphenated name to assist the compiler with alphabetically-organized kind definitions that disagree with type descendence order.] A numeric-dial is a kind of dial. A numeric-dial has a number called current setting. A numeric-dial has a number called minimum setting. The minimum setting of a numeric-dial is usually 0. A numeric-dial has a number called maximum setting. The maximum setting of a numeric-dial is usually 9. Check setting a numeric-dial (called spun dial) to something (this is the numeric dials have ranges rule): unless the intended setting is between the minimum setting of the spun dial and the maximum setting of the spun dial: [see "New Phrases to Decide"] say "[The noun] apparently only goes from [minimum setting of spun dial] to [maximum setting of spun dial]."; rule fails. To rotate (rotated dial - a dial): increment the current setting of the rotated dial; if the current setting of the rotated dial is greater than the maximum setting of the rotated dial: now the current setting of the rotated dial is the minimum setting of the rotated dial. Carry out turning a numeric-dial (called the rotated dial) (this is the turning a numeric dial rotates it by one rule): rotate the rotated dial. Carry out setting a numeric-dial (called adjusted dial) to something (this is the apply intended setting to numeric dials rule): now the current setting of the adjusted dial is the intended setting. Report setting a numeric-dial (called spun dial) to something (this is the default report setting a numeric dial rule): say "[The spun dial] is now set to [current setting of the spun dial]."; rule succeeds. [halt processing of report rules] Section - Combination-Dial [Hyphenated name to assist the compiler with alphabetically-organized kind definitions that disagree with type descendence order.] A combination-dial is a kind of numeric-dial. The description of a combination-dial is "A small dial. The window above reads '[current setting]'." A combination-dial has a relative position. Understand the relative position property as referring to a combination-dial. A combination-dial has a number called target setting. A combination-dial can be already evaluated or not yet evaluated. [These are added to simplify the logic for the green button, i.e. the lab door lock's "mastermind" puzzle.] [Note that, in the original source code, the following logic was repeated across the various individual objects. This implementation applies them to the kind for the sake of elegance. Also note that this class had the I6 attribute 'static' as part of its class definition. The corresponding I7 property 'fixed in place' was omitted from this kind to prevent conflict with the I7 standard rule prohibiting turning fixed in place things. The player is prevented by other I7 standard rules from walking off with the dials because they are part of the set of dials.] After turning a combination-dial (called the rotated dial) (this is the report new setting after turning a combination-dial rule): say "The window above [the noun] now reads: '[current setting of the noun]'." After setting a combination-dial to something (this is the report new setting after setting a combination-dial rule): say "The window above [the noun] now reads: '[current setting of the noun]'." Section - Crate (aka "Barrel") (barrel_class) [Note that this class in the source code included the I6 property 'static'. Oddly, applying the corresponding I7 property 'fixed in place' does not cause any conflict with the I7 standard rules, at least in 6G60. However, a) these are clearly not intended to be completely immobile, and b) there is logic in place to prevent taking them, so this particular bit of the source is ignored here.] A crate is a kind of thing. A crate is always pushable between rooms. Understand "crates" as the plural of crate. Instead of taking or pulling or turning a crate (this is the crates are not very mobile rule): say "It's rather heavy." After pushing a crate (this is the but they can be pushed rule): say "It's heavy, but you manage to make it slide along the floor a bit." [Note that the original source code gives the message "You give the crate a good shove." but this implies that it moves on its own after that. Since this is not how going with something works in I7, and since the original source code automatically forced the player to go in the same direction after moving the crate to the new location, this implementation takes the liberty of modifying the message to make it more in line with the simulated action.] Carry out going from somewhere with a crate (called moved crate) (this is the report pushing crates rule): say "Leaning into it, you laboriously push [the moved crate] ahead of you." [This rule is added mainly because the I7 standard rules (at least in 6G60) don't list the object you brought with you in the description of the room you're arriving in. I monkeyed about a bit trying to force it to list the crate by marking it for listing and making it unmentioned so it would appear in the course of normal looking on arrival at the new room, but it didn't work. Then I created an every turn when preamble "when the current action is pushing a crate to a direction", which seemed to work great until I discovered it was not sensitive to failure via an intervening instead rule. This approach was worked out after examining the 6G60 Standard Rules. It is triggered instead of the normal report going rule only when pushing a crate, and by "considering" the same rule followed within the normal report going rule, the room description is generated in its usual manner.] Report the player going when the thing gone with is a crate (called moved crate) (this is the make up for inaccessible I7 logic rule): consider the describe room gone into rule; say "You release [the moved crate] as it scrapes to a halt."; rule succeeds. [halt processing of report rulebook] Section - Distant View [This class does not exist in the original but is created to allow better handling of those situations where a thing is visible from the location but not in the location. Backdrops have the unfortunate attribute of being accessible to touch.] A distant view is a kind of backdrop. Instead of doing something to a distant view when the action requires a touchable noun (this is the distant views are not close enough to touch rule): say "[The noun] is too far from here." Instead of doing something when the second noun is a distant view and the action requires a touchable second noun (this is the distant views are not close enough to interact with rule): say "[The second noun] is too far from here." Section - Flag (flag_class) [Note that this class formally declared the plural name as "flags" in the original source code, but I7 correctly assumes the right plural, so this property is not replicated here. Also note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_flag," but, since use of this attribute was exclusively associated with objects of class flag_class, this is deemed unnecessary and omitted here in favor of testing for the flag kind when appropriate. Finally, note that an explicit plural "flags" is declared. See "Scrolls" for details on this.] A flag is a kind of thing. The description of a flag is usually "A short square piece of colored cloth." The size of a flag is usually 15. Understand "flag" or "cloth" as a flag. Understand "flags" as the plural of flag. A red flag is a kind of flag. Understand "red" as a red flag. The description of a red flag is "A red square of cloth." A blue flag is a kind of flag. Understand "blue" as a blue flag. The description of a blue flag is "A blue square of cloth." Section - Golem [Although there was no class for this kind of object in the original source code, this implementation creates a kind for utility purposes.] A golem is a kind of animal. The essential nature of a golem is usually mineral-like. The description of a golem is usually "An oddly generic golem". Every golem has a number called current hit points. The current hit points of a golem is usually 1. Every golem has a number called attack power. The attack power of a golem is usually 1. A golem can be hostile. Every turn when a golem (called belligerent) is at hand (this is the golems turn hostile on sight rule): if the belligerent is not hostile and the belligerent can see the player: now the belligerent is hostile. Section - GUS Gate (GUS_Gate_Class) [Note that the implementation of these gates varies significantly from the original source code, which handled gate behavior via room-based before() rules. The idea is that using the I7 door kind simplifies the logic somewhat by allowing the barrier code to be centralized in a kind. The original implementation approach here gave GUS Gates a "passable" property that would be turned on after entering a coin. The player would be barred from going through when the gate was not passable. This presented some potential issues in that the player should be allowed to walk out of the station unchallenged. Although this could be handled by creation of an I7 Before rule changing the gate to passable when going through it from the inside of the station, I was worried that a glitch might develop if a subsequent instead rule prevented the player from going through *after* the passable status was set by the before rule. That would let the player come in from the outside without a coin having been put in. The logic was reworked so that gates "absorb" coins and only allow passage from the outside in when a coin is part of the gate.] A GUS Gate is a kind of door. A GUS Gate can be damaged. A GUS Gate is always open and unopenable. Understand "metal" or "gate" as a GUS Gate. Definition: a GUS Gate is passable rather than blocked if it incorporates a coin. [Note that, though this class is given the I6 'transparent' property in the original (so that the embedded slot is accessible), and the new default I7 behavior of showing all parts would not require any equivalent, this kind requires the following concealed possessions rule due to the coin-absorbing behavior described above.] Rule for deciding the concealed possessions of a GUS Gate: if the particular possession is a coin, yes; otherwise no. [Note the revision of the description of a gate as compared to the original source code. This license is taken in an attempt to make the nature of the "gate" more clear.] The initial appearance of a GUS Gate is usually "A metal gate bisects the fence to the [direction of a random touchable GUS Gate from location]." The description of a GUS Gate is usually "'Gate' is perhaps a misnomer; there is no door, so the gate is really more of a gap in the fence than anything else. The two metal posts to either side of the empty space come up to about your waist[if a random touchable GUS Gate incorporates the thin slot]. There's a thin slot on one of the sides[end if][if a random touchable damaged GUS Gate incorporates the thin slot] that looks slightly dented[end if]." The printed name of a GUS Gate is usually "platform gate". Understand "platform gate" or "gap" as a GUS Gate. To discourage fare-jumping: say "A subway worker yells 'Hey pal, no fare-jumpers!'" Instead of climbing a GUS Gate (this is the an early example of the inexplicably-impassable low metal fence rule): discourage fare-jumping. Instead of jumping over a GUS Gate (this is the you'll actually need to find some coins here rule): discourage fare-jumping. Instead of opening a GUS Gate (this is the GUS Gates can't be opened rule): say "It looks like it's already open." Instead of closing a GUS Gate (this is the GUS Gates can't be closed rule): say "There doesn't seem to be anything to close." [Note that the logic of the following rule is, in the original source code, repeated with appropriate variation for every *_GUSStop location.] Instead of inserting a coin (called proposed payment) into a GUS Gate (called slot-containing gate) while the thin slot is at hand (this is the interpret putting coins in a GUS gate as putting them in the gate's slot when available rule): try inserting the proposed payment into the thin slot instead. Check inserting a coin into a GUS Gate (this is the it's the slot that takes coins not the gate rule): say "There doesn't seem to be a coin slot on this side."; rule fails. Check inserting a coin into the thin slot when the thin slot is part of a passable GUS Gate (this is the no need to pay twice rule): say "The gate tinkles musically, and the coin spit back out into your hand[first time]. It won't accept a new coin until someone has gone through it[only]."; rule fails. Check going through a blocked GUS Gate from a room that is not a GUS Train Platform (this is the who needs turnstiles when one has magic rule): say "An abrupt buzzing noise sounds as you try to pass through the gate, and an invisible force blocks your way."; stop the action. After going through a GUS Gate (called traversed gate) (this is the easily-available public transportation invites a casual attitude towards locomotion rule): now every coin incorporated by traversed gate is off-stage; say "You saunter through the open gate."; continue the action. To discourage violence against gates: say "Only the most anti-social vandal would dream of damaging public property like that." Instead of attacking a GUS Gate (called beleaguered gate) (this is the anti-vandalism PSA rule): discourage violence against gates. Section - GUS Station [Note that the "metal fence" backdrop and the "GUS Stop platform" backdrop will also be found in GUS Stations. See the section for "GUS Stop Train Platform" for the relevant declaration.] A GUS Station is a kind of room. A GUS Station has some text called stop name. A GUS Station has a direction called platform placement. The platform placement of a GUS Station is usually southeast. A GUS Station can be multi-line. A GUS Station has some text called default description. The default description of a GUS Station is usually "You are standing at the entrance to the [stop name of the item described] Great Underground Subway (GUS) station. The train platform lies past the gate to the [platform placement of the item described], or stairs lead up into the city[transfer notice]." To say transfer notice: let D be the direction of a random touchable GUS Gate from the location; let G be the door D from the location; let R be the other side of G; if R is a topmost-level GUS Train Platform: say ". Some lettering on the wall reads 'TRANSFER STATION'"; otherwise: do nothing. The description of a GUS Station is usually "[default description]". Instead of going inside in a GUS Station (this is the redirect inside for a GUS Station to relevant platform direction rule): try going the platform placement of the location instead. When play begins (this is the include common items in each GUS Station rule): move the GUS Stop stairway backdrop to all GUS Stations. [See "Entrance to Greater Anthar" for declaration of this backdrop.] Section - GUS Train Platform A GUS Train Platform is a kind of room. A GUS Train Platform has a direction called track side. Definition: a direction is along-the-tracks if the room it from the location is the location. To decide which text is the platform label of (stop - a GUS Train Platform): decide on the stop name of the antechamber of stop. The description of a GUS Train Platform is usually "You are standing in a long underground chamber. The [track side] side of the room contains a lowered set of train tracks. The tracks run [list of along-the-tracks directions] into[if the number of along-the-tracks direction is 1] a dark tunnel[else] dark tunnels[end if]. Along one wall, painted lettering reads '[platform label of the item described in upper case] STATION'[if the number of touchable GUS Gates is at least 1]. A short walkway leads [direction of a random touchable GUS Gate from the location] to a metal fence[else][end if][if the room down from the location is a GUS Train Platform]. There is also a stairway down here[end if][if the room up from the location is a GUS Train Platform]. A set of stairs leads up out of the gloom[end if][if a subway train proxy is at hand]. There is a large train car sitting on the tracks to the [track side][end if]." A walkway and an underground tunnel are unimportant backdrops. Understand "dark" or "tunnels" as the underground tunnel. [Note that the following backdrop is derived from the train_tracks object in the original source code, which can be found in the SUBWAY.INF file. It is relocated here because its presence is linked to the GUS Train Platform kind. Also note that the original source code used an I6 found_in property to place it in rooms FROSTHAM_GUSPlatform, ARAGAIN_GUSPlatform, FUBLIO_GUSPlatform, and ARAGAIN_GUSPlatform2, omitting several similar rooms. This is presumed to be an oversight, and the following rule extends it to all train platform rooms for consistency.] There is a backdrop called some rails. The description of the rails is "A pair of large, metal train tracks." Understand "train track" or "train tracks" or "tracks" or "track" or "rail" as the rails. There is an unimportant backdrop called an access stairway. Understand "stairs" or "stairway" as the access stairway. Definition: a GUS Train Platform is multi-level if the room up from it is a GUS Train Platform or the room down from it is a GUS Train Platform. Definition: a GUS Train Platform is topmost-level if the room down from it is a GUS Train Platform and the room up from it is not a GUS Train Platform. Definition: a GUS Train Platform is lower-level if the room up from it is a GUS Train Platform. [Note that, since the "move X backdrop to..." command does not add to the list of locations in which the backdrop will be found but instead replaces it, it is necessary that only one such declaration be issued. The following definitions assist in this, since some backdrops need to be in both GUS Station rooms and GUS Train Platform rooms.] Definition: A room is platform-including if it is a GUS Station or it is a GUS Train Platform. Definition: A room is fence-including if it is a GUS Station or it is a not lower-level GUS Train Platform. When play begins (this is the include common GUS Platform items in each GUS Train Platform rule): move the metal fence backdrop to all fence-including rooms; [See "Frostham GUS Station" for declaration of this backdrop.] move the GUS Stop platform backdrop to all platform-including rooms; move the access stairway backdrop to all multi-level GUS Train Platforms; move the walkway backdrop to all rooms that are GUS Train Platforms; move the underground tunnel backdrop to all rooms that are GUS Train Platforms; move the rails backdrop to all rooms that are GUS Train Platforms. [Note that this is a new addition not present in the original, to ease getting in and out of stations. It's important to note that locked GUS Gates interfere with the route-finding unless a special phrase option is used -- see WWI 6.14.] Instead of going outside in a GUS Train Platform (this is the redirect outside for a GUS Train Platform to relevant station direction rule): let escape be the best route from the location to the (antechamber of the location) through (rooms that are platform-including), using even locked doors; try going escape instead. [Note that track directions will be indicated by self-connection to the train platform in question, see the "Great Underground Subway" part for examples.] Instead of going from a GUS Train Platform when the room gone to is the room gone from (this is the can't walk along the tracks rule): say "A helpful subway worker says 'Hey pal, get outa there!'" Instead of going nowhere from a GUS Train Platform when the noun is the track side of the location (this is the can't walk onto tracks rule): say "You'd fall onto the tracks if you went that way." To decide whether (C - a subway car) is far from arriving at (P - a GUS Train Platform): if the current destination of C is P and C is en route and the activity timer of C is one: decide no; otherwise: decide yes. A subway car is a kind of room. [relocated assertion of kind due to alphabetical ordering, see "Subway Car" under "New Kinds" for kind definition.] Fast-forwarding something is an activity on subway cars. Rule for fast-forwarding a subway car (called zoomed train) (this is the fast-forward a train rule): now zoomed train is noiseless; while zoomed train is far from arriving at the location: follow the subway transit rules for the zoomed train; now zoomed train is noisy. After waiting while the location is a GUS Train Platform (called waiting place) and no subway train proxy is at hand (this is the sometimes accelerate trains for waiting players rule): let T be the servicing train of waiting place; say "You wait impatiently for a train to arrive"; if T is far from arriving at the location: if a random chance of 3 in 10 succeeds: say ", and soon you hear the sound of one approaching."; carry out the fast-forwarding activity with T; otherwise: say "."; otherwise: say ", which, as luck would have it, happens immediately." Section - Headpiece [A minor oversight in the original Spiritwrak: It's possible to wear two things on your head at once. While this has no effect on gameplay, it's a bit silly.] A headpiece is a kind of thing. A headpiece is usually wearable. Instead of wearing a headpiece when the player wears a headpiece (this is the don't let all these hats go to your head rule): say "You can't put on [the noun] when you're already wearing [the random headpiece worn by the player]." Section - Key [This kind is a late addition, mostly to allow for handling of keys as a group by way of assigning a common plural.] A key is a kind of thing. Understand "keys" as the plural of a key. Section - Memory A memory is a kind of thing. [See also the section "Short-Term Retention".] Section - Parchment (parchment_class) [Note the declaration of an explicit plural; see "Scrolls" for more on this.] A parchment is a kind of thing. A parchment is usually papery and mass-nouned. The description of a parchment is usually "A piece of blank parchment." The size of a parchment is usually 15. [Understand "parchments" as the plural of parchment.] [Note: Due to the 9-letter word length limit for parser word recognition, trying to create that plural form interferes with commands like ">read parchment" when two parchments are present. This penalty outweighs the the value of having a plural word or the class.] Section - Proxy Entrance [This class does not exist in the original source code, but there are numerous places where something mentioned in a room description requires creation of an object in this implementation, due to the rules around "unimportant things". The idea here is that attempts to enter the object will redirect the player's action transparently. So that, for example, in Frostham the player can enter either building discussed.] A proxy entrance is a kind of thing. A proxy entrance has a direction called relevant direction. A proxy entrance is usually scenery. Instead of entering a proxy entrance (called entrance) (this is the redirect attempts to enter proxy entrances rule): try going the relevant direction of entrance instead. Instead of going inside when exactly one proxy entrance (called only entrance) is at hand (this is the automatically translate in when there is just one proxy entrance rule): try entering the only entrance instead. Instead of going inside when more than one proxy entrance is at hand (this is the make player choose if there are multiple proxy entrances rule): say "You glance over [the list of at hand proxy entrances], hesitating over which to enter." Section - Rod (rod_class) [Note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_rod," but, since use of this attribute was exclusively associated with objects of class rod_class, this is deemed unnecessary and omitted here in favor of testing for the rod kind when appropriate. Also note that, for consistency, an explicit plural "rods" is declared. See "Scrolls" for details.] A rod is a kind of thing. A rod can be real or fake. A rod is usually scored. A rod has some text called color. The color of a rod is usually "indescribably". The description of a rod is usually "[if the item described is fake]It's a [else]A [end if]short section of [if the item described is fake]a [end if]rod[if the item described is fake] made of an indeterminate hard substance[end if], colored [color][if the item described is fake]. A piece of the Rod of the Ancients, no doubt[end if]." The size of a rod is usually 10. Understand "rod" as a rod. Understand "rods" as the plural of rod. Definition: A rod is completed rather than incomplete if four rods are part of it. [Note that the following is made a check rule to prevent the various default spell responses from implying that some spell might work on rods.] Check casting a spell at a rod (this is the rods are immune to magic rule): say "You complete the chant, but the rod lies unaffected. Perhaps it is protected from magic somehow?"; rule fails. The rods are immune to magic rule is listed last in the check casting it at rules. [Note that the following rules are included to assist in handling the interaction of ledak with rods. Though they should be protected from magic, it is possible to cast some spells (specifically ledak) at no target with the expectation of an "area effect". It would be possible to simply exempt some things from ledak's search-and-destroy routine, but the following responses serve as a hint that all is not right with the PC's quest.] A rod has some text called ledak-interaction event. When play begins (this is the fake rods count as forged rule): now every fake rod is forged; now every fake rod is ledak-resistant; repeat with evil rod running through fake rods: now the ledak-interaction event of evil rod is "A bright yellow glow surrounds [the item described], and a popping flare of purple energy leaves you blinking for a moment. When your vision clears, the rod is unharmed." [Note that variations of the following logic were part of the before() rule for the Join action within each "true" rod piece in the original source code. The behavior is generalized as part of the rod class in this implementation.] Instead of joining a fake rod to a real rod (this is the real rods take precedence in join attempts rule): try joining the second noun to the noun instead. Instead of joining a real rod that is not the golden rod to the golden rod (this is the golden rod takes precedence in join attempts rule): try joining the second noun to the noun instead. Check joining a fake rod to a fake rod (this is the only licensed rod joiners should attempt to join fake rods rule): say "You try to bring the rods together, but a sudden, stinging blast of energy prevents you."; rule fails. Check joining a real rod to a fake rod (this is the real and fake are like oil and water rule): say "As you bring the two rods together, purple and golden arcs crackle between them, and they are forced apart."; rule fails. Check joining a real rod that is not the golden rod to a real rod when the golden rod incorporates a real rod (this is the prohibit joining unincorporated rods once golden rod is created rule): say "The rods begin to vibrate gently, and push each other apart[if the golden rod is at hand] while seeming to be dragged toward [the golden rod][end if]."; rule fails. [Note the change in messaging from the original, to make it more explicit that the purple sphere is interfering with attempts to join real rod pieces.] After joining a real rod to a real rod when the golden rod does not incorporate a real rod (this is the joining two real rods the first time creates the golden rod rule): now the golden rod is in the holder of the second noun; now the noun is part of the golden rod; now the second noun is part of the golden rod; say "There is a dazzling, golden light as you join the two rod pieces! What remains is a new, different rod piece." Section - Scroll (scroll_class) [Note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_scroll," but, since use of this attribute was exclusively associated with objects of class scroll_class, this is deemed unnecessary and omitted here in favor of testing for the scroll kind when appropriate. Also note that the class defined behavior to make use of each instance's I6 'general' flag to track whether that particular scroll had been read, and to modify the inventory listing if it had been. This implementation uses I7's internal state tracking to achieve the same purpose. Finally, note that the original source code had an I6 'parse_name' routine for the scroll class that took some special care around the use of the term "scrolls", setting the 'parser_action' global to the "library fake action" ##PluralFound (see DM4 pp. 214 and 417) when encountered in the player's command. Unlike with the coins (which have no variation as individual things), to allow the word "scrolls" to work in a similar way to the original requires a special declaration as described in WWI 16.18. While just allowing "scrolls" as a synonym for the kind (like "scroll") appears to work for reasonable interaction, the command ">put scrolls in sack" will ask for clarification of which scrolls in a way that does not occur when a plural form is explicitly declared. (Note: even in the absence of a plural declaration, the player can type ">put all scrolls in sack" and this works.)] A scroll is a kind of thing. A scroll is usually scored and papery. The size of a scroll is usually 10. Understand "scroll" as a scroll. Understand "scrolls" as the plural of scroll. [Note that the description property was difficult to work out here because there is no direct equivalent in I7 to the I6 object-oriented "this" reference. (edit: Actually, although not spelled out in the documentation, examination of the Standard Rules shows that the equivalent is the phrase "the item described.") Although there seems to be quite a lot of implicit understanding taking place, it's not laid out very clearly in WWI, and the typing seems to sometimes get confused when working within substitutions. Although the following works in 6G60, there probably is (or will be) a better way to do this.] The description of a scroll is usually "[scroll-description][run paragraph on]". To say scroll-description: let x be lesson; [I7 is somehow magically interpreting this as the lesson of the scroll calling this phrase] if x is nothing: [needed to do it this way because "[if lesson is nothing]...[else]...[end if]" construction didn't work; condition always evaluated false due to typing mismatch of object-valued property vs. object?] say "The scroll has faded, and you cannot read it."; otherwise: say "The scroll reads: '[index listing of a random spell that is x].'". [awkward wording gets around apparently spurious error message that "[index listing of x]" uses a temporary named variable instead of a spell] Understand "illegible" as a scroll when the lesson of the item described is nothing and we have examined the item described. [Thanks to the model provided in Ex 309 of WWI 16.16 for the following.] Understand "[something related by reversed inscription]" as a scroll when we have examined the item described. Instead of unrolling a scroll (this is the interpret unrolling scrolls as examining rule): try examining the noun instead. Check rolling up a scroll (this is the no need to roll a scroll role er rule): say "Scrolls are always rolled up when not being read."; rule fails. After printing the name of a scroll (called noted scroll) while taking inventory (this is the supplement scroll listing with its spell when read rule): if we have examined the noted scroll: say " [if the lesson of the noted scroll is not nothing](of the [lesson of the noted scroll] chant)[else](which is illegible)[end if]". Section - Spell (as a kind) (spell_class) [Note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_spell," but, since use of this attribute was exclusively associated with objects of class spell_class, this is deemed unnecessary and omitted here in favor of testing for the spell kind when appropriate. The original source code also declared an I6 attribute 'known_about' that appears to be used exclusively for spells in Spiritwrak. This is replaced with the property "unknown/known". The permanently-learned/temporarily-learned property is created to make explicit the idea of not having to memorize a spell, handled indirectly in the original by setting its memorization count to 100. The original source code also declared an I6 universal property called 'magic' that, in the case of spells, was used to hold a routine containing the logic invoked by the general case of casting a spell. This is functionally equivalent to carry out and/or report rules in I7, so no direct equivalent exists. Importantly, the original source code (which is "cribbed" from Graham Nelson's "Curses", per Mr. Yu's comments) specified an I6 fake action 'SayName', but a fake action is a concept which doesn't seem to really apply in the world of I7. Based on the use of SayName, the logical equivalent in I7 is to create a substitution to be "said" (see WWI 5.13), so that approach is taken here. 'SpellName()' is an I6 routine defined in the original that seems like it was just used to print a spell's name (assuming the spell's magic word was the first entry in its I6 'name' property array, see DM4 p. 471), so it is not necessary to emulate it directly.] A spell is a kind of object. [Don't want spells to be material things, but a concept like a direction.] A spell can be known or unknown. A spell is usually unknown. A spell can be permanently-learned or temporarily-learned. A spell is usually temporarily-learned. A spell can be simple or complex. A spell is usually simple. A spell has some text called effect. [what spell does] The effect of a spell is usually "(no effect defined)". A spell has a number called memorization count. The memorization count of a spell is usually zero. A spell is usually improper-named. Understand "spell" or "chant" as a spell. Understand "spells" as the plural of a spell. Definition: A spell is memorized rather than forgotten if it is permanently-learned or the memorization count of it is at least one. To say index listing of (incantation - a spell): say "[italic type][printed name of incantation][roman type] chant: [effect of incantation]"; now incantation is known. [Need following because use of [any spell] token in understand lines drives disambiguation of known spells.] After deciding the scope of the player while examining (this is the include known spells in scope when examining rule): repeat with viewable-spell running through known spells: place viewable-spell in scope. [Need following because spells are objects not things, so they do not get a description property. The behavior of this version differs slightly from the original -- there, a known spell can be examined any time, not just when memorized.] Instead of examining a spell (called referral) (this is the short-circuit normal description process for spells rule): if the short-term retention recalls referral: say index listing of referral; say "[line break]"; otherwise: say "You can't quite remember the details of the [referral] chant right now. Perhaps you should consult the written version." Section - Spellbook (spell_book_class) [Note that the original source code specified a numeric 'capacity' property for this class, and it seemed to make a capacity check in the I6 'Before()' routine for the Learn action, which would return true without updating the array associated with the instance's 'magic' property in cases where the capacity had been reached. It does not seem like this condition would ever be reached in normal play, as there are only 19 total spells in the original game, nor is it clear how the game would be affected if the limit were reached -- since it appears that both successful and unsuccessful checks return true, presumably the game would show the normal gnusto message but the spell would mysteriously remain off the books. Since this implementation handles spells "entry" in a spellbook via the cataloguing relation (see that section), there is no fixed number of spells that can be recorded, and I see no compelling game reason to introduce a limit. The 'capacity' property for the class is given an equivalent in the "maximum spell capacity" property here, but no logic makes use of it at present. Also note that certain safety logic (for the Learn action of a spellbook that had no array in its 'magic' property) is omitted as unnecessary, per the above. Finally, note the slight elaboration of a "title" property to allow a generalization of the prayer book's description.] A spellbook is a kind of book. A spellbook has a number called maximum spell capacity. The maximum spell capacity of a spellbook is usually 20. A spellbook has some text called title. The title of a spellbook is usually "". The size of a spellbook is usually 15. Understand "spellbook" or "spell book" [or "book"] as a spellbook. Understand ["books" or] "spell books" or "spellbooks" as the plural of a spellbook. Definition: A spellbook is untitled if the title of it is "". Understand "untitled" as a spellbook when the item described is untitled. Definition: A spellbook is blank if the number of spells recorded by it is zero. Understand "blank" as a spellbook when the item described is blank. The description of a spellbook is usually "[if the item described is untitled][The item described] has the following spells written within it:[else][bold type][title][roman type][end if][line break][spellbook contents of the item described]". To say spellbook contents of (B - a spellbook): repeat with collected spell running through spells recorded by B: say "[line break][index listing of collected spell]". Instead of opening or closing a spellbook (this is the no need to open or close spellbooks rule): say "[The noun] will always open to the desired page thanks to the powers of the Gods, may they never forget us." After attacking a spellbook (this is the spellbooks are immune to attack rule): say "When you are done, [the noun] remains unmarred." Check examining a blank spellbook (this is the blank spellbooks are uninteresting rule): say "The book[if the noun is not untitled], despite bearing the title '[title of the noun],'[end if] is currently blank. No spells grace its pages." instead. Section - Sphere (sphere_class) [Note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_sphere," but, since use of this attribute was exclusively associated with objects of class sphere_class, this is deemed unnecessary and omitted here in favor of testing for the sphere kind when appropriate. Also note that, for consistency, an explicit plural is declared. See "Scrolls" for details.] A sphere is a kind of thing. A sphere is usually scored. A sphere has some text called color. The color of a sphere is usually "uncolored". The description of a sphere is usually "A tiny, perfectly-round, [color] sphere, made of a metal unfamiliar to you." The size of a sphere is usually 3. Understand "sphere" as a sphere. Understand "spheres" as the plural of sphere. [Note that the following is made a check rule to prevent the various default spell responses from implying that some spell might work on rods.] Check casting a spell at a sphere (this is the spheres are immune to magic rule): say "You complete the chant, but the sphere lies unaffected. Perhaps it is protected from magic somehow?"; rule fails. The spheres are immune to magic rule is listed last in the check casting it at rules. Section - Spirit [This kind does not derive directly from a class in the original source code. However, the implementations of the various spirits seem similar enough to warrant centralizing their logic in a kind in this implementation. In the original source code, spirit objects generally made use of the 'general' property in the original code, to flag the appearance of a spirit and/or indicate it was in attack mode. The more descriptive label 'hostile' is used here, though this flag setting makes no functional difference in the final implementation. The spirit objects also made use of 'concealed' property, probably so that they would not appear in the initial room description. In this implementation, spirits begin off-stage and are summoned by various trigger rules; this obviates the need to conceal the object. Note that a new property "unscried/scried" is added to this kind to assist in tracking state for triggering the "signal proximity to an unholy artifact" routine.] A spirit is a kind of animal. A spirit can be hostile. A spirit is usually hostile. A spirit can be scried or unscried. The essential nature of a spirit is usually mineral-like. Understand "malevolent" or "evil" or "elemental" or "creature" as a spirit. A spirit has some text called reaction to spellcasting. The reaction to spellcasting of a spirit is usually "The spirit interferes with your spellcasting somehow." After casting a spell that is not swanko at a spirit (called targeted spirit) (this is the most spells won't work against spirits rule): say the reaction to spellcasting of the targeted spirit with an extra line break. A spirit has some text called banishment event description. The banishment event description of a spirit is usually "The spirit is successfully banished." After casting swanko at a spirit (called targeted spirit) (this is the swanko banishes spirits rule): remove the targeted spirit from play; say the banishment event description of the targeted spirit with an extra line break. A spirit has some text called killing blow description. The killing blow description of a spirit is usually "The spirit smashes you with a blast of magical energy sufficient to kill you on the spot. Not very sporting, to be sure." A spirit has some text called successful strong attack description. The successful strong attack description of a spirit is usually "The spirit wallops you with a very strong attack. Double ouch!" A spirit has some text called successful medium attack description. The successful medium attack description of a spirit is usually "The spirit smacks you with an attack. Ouch!" A spirit has some text called attack misses player description. The attack misses player description of a spirit is usually "The spirit attacks you, but misses." A spirit has some text called cumulative injuries kill the player description. The cumulative injuries kill the player description of a spirit is usually "The cumulative injury you've suffered from the spirit is enough to kill you. Sorry." [It's not ideal to insert the effects of the earth spirit's special attack directly into this general rule, but there were issues with line spacing before the next prompt when using the approach of inserting the "move the player" command into a something to say phrase specific to the earth spirit's successful medium attack description.] Every turn when a spirit (called the assaulting spirit) is at hand (this is the generic spirit attack rule): let i be a random number between 1 and 5; if i is: -- 1: say the killing blow description of the assaulting spirit with an extra line break; end the game in death; rule succeeds; [prevent further processing of rule] -- 2: say the successful strong attack description of the assaulting spirit with an extra line break; decrease the current hit points of the player by 10; -- 3: say the successful medium attack description of the assaulting spirit with an extra line break; decrease the current hit points of the player by 5; if the assaulting spirit is the earth spirit and the location is Collapsed Chamber: move the player to Temple Two; -- otherwise: say the attack misses player description of the assaulting spirit with an extra line break; if the current hit points of the player is less than 1: say "[line break]"; say the cumulative injuries kill the player description of the assaulting spirit with an extra line break; end the game in death. A spirit has some text called successful hit by player description. The successful hit by player description of a spirit is usually "You manage to hit the spirit, but the blow doesn't seem to have an effect." A spirit has some text called miss by player description. The miss by player description of a spirit is usually "You attack the spirit, but the spirit dodges." Instead of attacking a spirit (called defending spirit) (this is the generic spirit defense rule): if a random chance of 13 in 20 succeeds: [Note: original code checked "random(20) >= 8"] say the successful hit by player description of the defending spirit; otherwise: say the miss by player description of the defending spirit. Instead of doing something when a spirit is at hand and the current action is generic life behavior (this is the generic spirit generic life rule): if the noun is a spirit or the second noun is a spirit: say "It's too busy trying to kill you." Section - Subway Car [A subway car is a kind of room.] [commented out because assertion had to be moved to "Subway Car" section in this "New Kinds" chapter, see there.] A subway car has a hue called route color. A subway car has a direction called current heading. A subway car has a room called current destination. A subway car has a number called activity timer. The description of a subway car is usually "You are in an underground train car. Various people fill the train, some in uncomfortable-looking seats." The printed name of a subway car is usually "[properly-capitalized route] Line Subway Car". Understand "interior" as a subway car. To say properly-capitalized route: let color-found-indexed be "[route color of the item described]"; say color-found-indexed in sentence case. [Note that the following property is not one that I wanted, but I couldn't seem to get an activity-based approach for suppressing subway car background noise messages while accelerating its arrival after the player waits in a GUS Train Platform. This is an unsatisfactory kludge, but it at least works.] A subway car can be noisy or noiseless. A subway car is usually noisy. There is an unimportant backdrop called an underground train car. Understand "subway car" as the underground train car. When play begins (this is the assign subway car route colors based on traveled subway lines rule): repeat with assigned train running through subway cars: let operational line be a random subway line traveled by assigned train; let transferred color be the hue [designated color code] of operational line; now the route color of the assigned train is transferred color. When play begins (this is the assign subway car initial direction and destination based on traveled subway lines rule): repeat with assigned train running through subway cars: let operational line be a random subway line traveled by assigned train; let initial destination be the first stop of operational line; [train will be pulling in to first station on route at start of game] let initial direction be the opposite of the route heading of operational line; [since pulling into first station must be coming from other end of route] now the current destination of the assigned train is initial destination; now the current heading of assigned train is initial direction; now the activity timer of assigned train is 1. When play begins (this is the assign subway car servicing status based on traveled subway lines rule): repeat with assigned train running through subway cars: let serviced line be a random subway line traveled by assigned train; repeat with serviced location running through the line route of serviced line: now assigned train stops at serviced location. When play begins (this is the include common items in all subway cars rule): move the underground train car backdrop to all rooms that are subway cars. Instead of going nowhere in an en route subway car when the noun is a cardinal direction (this is the can't exit a moving train rule): let subway door path be the last good direction of a random at hand subway door; if the noun is subway door path: say "The train is moving right now. Better wait until it stops to get off."; otherwise: say "The only way out is the door to the [subway door path], but it's closed when the train is in motion." Section - Subway Door [No equivalent to this existed in the original implementation. It is added for user-friendliness to players.] A subway door is a kind of thing. A subway door can be enterable. A subway door has a direction called last good direction. A subway door is usually fixed in place. Understand "door" as a subway door. To decline passage through closed subway doors: say "The doors are currently closed." Instead of entering a subway door that is not enterable (this is the can't use subway door when it's closed rule): decline passage through closed subway doors. Instead of entering a subway door (called desired exit) when the number of valid directions is at least one (this is the construe entering a subway door as going its last good direction rule): try going the last good direction of the desired exit instead. Instead of going nowhere when a subway door (called desired exit) is at hand (this is the indicate that exit is no longer available rule): if the noun is the last good direction of the desired exit: decline passage through closed subway doors; otherwise: continue the action. Every turn when the location is a subway car and a subway door (called working door) is at hand (this is the update subway door states rule): if the number of valid directions is at least one: now the working door is enterable; now the last good direction of the working door is a random valid cardinal direction; [specifying cardinal prevents it from choosing "outside"] otherwise: now the working door is not enterable. The update subway door states rule is listed after the make the trains run on time rule in the every turn rulebook. Section - Subway Line [Note that this is part of a major reworking of the logic in the "SUBWAY.INF" file of the original source code. This implementation tries for a more generalized and extensible structure, but note that the logic assumes the following about subway lines: a) they are linear, not closed loops, b) each stop is unique on a given route, i.e. no duplicates in the list of rooms, c) cars shuttle back and forth from one end to the other, d) the route heading is the overall direction from the first room in the line route to the last room in the line route, and e) route directions are always opposite (i.e. routes don't bend enough that you would want, for example, one end to be "north" and the other end to be "west'). If you prefer a circular route on your subway system, it should be possible to do so with some revisions to the subway transit rules (See the "Great Underground Subway" part).] A subway line is a kind of object. A subway line is usually proper-named. A subway line has a hue [called designated color code]. A subway line has a direction called route heading. A subway line has a list of rooms called line route. Section - Subway Seat (Train_Car_Seat_Class) [Note that this class was not given the I6 'supporter' attribute in the original source code, but it appears to be intended to function that way, so this implementation bases the kind on the supporter kind. Also note that, in the original source code, each object of this type (PURPLELINE_car_seats, ORANGELINE_car_seats, GREENLINE_car_seats) made use of the I6 'general' flag to track whether the player had already found a coin in it. This implementation uses the more descriptive condition 'coin-containing' to the same effect.] A subway seat is a kind of supporter. A subway seat is usually enterable and scenery. Understand "seats" as a subway seat. The description of a subway seat is usually "There seem to be a few seats that haven't been taken." A subway seat can be coin-containing. A subway seat is usually coin-containing. After searching a coin-containing subway seat (called searched seat) (this is the can find a coin in coin-laden seats rule): now the searched seat is not coin-containing; now the player carries a random uncirculated coin; say "Good fortune is your friend! You notice a forgotten coin stuck in a seat crack, and fend off two passengers to grab it." Check entering a subway seat (this is the subway seating can be contested rule): if a random chance of 1 in 5 succeeds: say "As you attempt to grab an open seat, someone rudely beats you to it."; rule fails. Section - Subway Train Proxy [This very specialized kind is used in some of the subway code, see "Subway Transit Rules" for logic where it is used.] A subway train proxy is a kind of proxy entrance. A subway train proxy has a hue called paint color. The description of a subway train proxy is usually "It's a rather large, sleek-looking train car, colored bright [paint color], with an invitingly-open door." Understand "car" or "train car" or "door" as a subway train proxy. Understand the paint color property as referring to a subway train proxy. Instead of opening or closing a subway train proxy (this is the subway train car proxy doors are automatic rule): say "[The noun]'s door is automatic and can't be manually controlled. Right now, it is open." When play begins (this is the assign subway car proxy colors based on stood in for subway car route colors rule): repeat with painted train running through subway train proxy: [Note spelling cheat!] let transferred color be the route color of a random subway car stood in for by painted train; [say "Assigning [hue transferred color] to [painted train] which stands in for [a random subway car stood in for by painted train]...[line break]";] now the paint color of the painted train is transferred color. The assign subway car proxy colors based on stood in for subway car route colors rule is listed after the assign subway car route colors based on traveled subway lines rule in the when play begins rulebook. [To prevent issues due to reordering of source.] Section - Trophy Depression (trophy_dep_class) [Note that the original declares the trophy_dep_class to have the attribute open, but this is omitted as the container kind defaults to this state in I7.] A trophy depression is a kind of container. A trophy depression is always fixed in place and open and privately-named. A trophy depression is always improper-named and singular-named. Understand "depression" or "niche" or "hole" or "keyhole" as a trophy depression. The size of a trophy depression is 8. The carrying capacity of a trophy depression is 1. [Note that in the original, each implemented object of the class specified an I6 'printed name' property of "circular depression". This implementation makes it a part of the class definition for clarity, and adds an adjective to match the printed name.] The printed name of a trophy depression is "circular depression". Understand "circular" as a trophy depression. The initial appearance of a trophy depression is "There is a circular depression in the center of the floor[unless the item described is empty]. Sitting in the depression is a trophy[end if]." The description of a trophy depression is "A small circular depression in the center of the stone floor[if the item described is empty]. There seem to be three small concave marks in the otherwise flat stone of the depression[otherwise]. At the moment, the depression holds a trophy[end if]." [Note that, since a trophy depression can only hold the trophy, the original source code offers a non-standard way of describing the trophy's presence in one. This offers a little oddness in the context of I7, as the 6G60 Standard Rules specify both a "standard examining rule" which prints the description of things that have a populated description property, and an "examine containers rule" that issues a list of things in the container if at least one thing is contained by it. The combination means that the presence of the trophy in the depression is repeated -- once as part of the description and once in the automatic listing of contents. The carry out rule following, by being specific to trophy depressions, gets head-of-the-line treatment in rule processing. Forcing success of the rule means carry out examining rulebook will halt after just executing the standard examining rule.] Carry out examining a trophy depression (this is the suppress listing of trophy depression contents when examining rule): consider the standard examining rule; rule succeeds. [Forces halt to carry out rulebook processing before moving on to standard examining rule.] Instead of putting something on a trophy depression (this is the convert putting things on to inserting things into for trophy depressions rule): try inserting the noun into the second noun instead. [Note that the original source code attached this logic to all individual instances of the class, but this implementation makes it a class-based rule for the sake of clarity.] Instead of inserting something that is not a champion's trophy into a trophy depression (this is the trophy depressions can only contain trophies rule): say "That doesn't quite fit." [This class is used for the Secret Trophy Room puzzle, which of the typical logical deduction type found in many old school games in that the player had to deduce the correct order in which to place a trophy in the various depressions. The puzzle also made use of a global variable called 'trophy_stage' to track player progress in doing this in the correct order. Since global variables are frowned on in the I7 world, in this implementation the class is given the condition 'primed' to track which depression is 'waiting' for the trophy, and associated after rules are used to either reset the puzzle or move it forward.] A trophy depression can be primed. When play begins (this is the set up Secret Trophy Room puzzle rule): reset the trophy room puzzle. Section - Vault (vault_class) [Note that the original source code specifies the I6 'transparent' property for this class, but it does not seem necessary, so it is omitted here.] A vault is a kind of container. A vault is always fixed in place and open. The description of a vault is "Basically a hollow rectangular hole cut into the wall." The carrying capacity of a vault is 100. The size of a vault is 10. Understand "vaults" as the plural of vault. Instead of inserting something that is not a coin into a vault (this is the sorry only money please rule): say "A strange force pushes your hand away." Section - "Very" Evil Elemental [This kind does not derive from a class in the original source code, but it seems appropriate to have one given the similar behavior of the four spheres of energy in the endgame. The name has "Very" in quotes because that word is not part of the kind's name; it's to be able to order sections alphabetically without causing compiler complaints about an undefined "sphere" kind.] An evil elemental is a kind of person. An evil elemental is usually mineral-like. An evil elemental is usually neuter. Understand "energy" or "sphere" or "energy sphere" or "sphere of" as an evil elemental. Understand "energy spheres" as the plural of an evil elemental. An evil elemental can be waiting to tempt. An evil elemental is usually waiting to tempt. An evil elemental has some text called energy color. The energy color of an evil elemental is usually "uncolored". An evil elemental has some text called leading article. The leading article of an evil elemental is usually "A". An evil elemental has a sphere called antisphere. An evil elemental has a room called engulfment destination. The description of an evil elemental is usually "[leading article] [energy color] sphere of energy." An evil elemental has some text called dissolution message. The dissolution message of an evil elemental is usually "The [energy color] sphere howls in rage and is no more!" An evil elemental has some text called engulfment message. The engulfment message of an evil elemental is usually "You feel a strong sense of foreboding as the [energy color] sphere engulfs the rod, then you! Your surroundings change once again...[line break]". An evil elemental has some text called temptation message. The temptation message of an evil elemental is usually "". To hand victory to (betrayer - an evil elemental): remove the golden rod from play; say "[engulfment message of betrayer]"; move the player to the engulfment destination of betrayer. Instead of giving the golden rod to an evil elemental (called targeted sphere) (this is the shouldn't give the true rod to the bad guys rule): hand victory to the targeted sphere. Instead of throwing the golden rod at an evil elemental (called targeted sphere) (this is the treat throwing the true rod at the bad guys as giving it to them rule): hand victory to the targeted sphere. [Note that, in the original, attempts to throw an incorrect sphere or other item simply didn't work. The following rule modifies this.] Instead of throwing something at an evil elemental when the noun is not the antisphere of the second noun (this is the incorrect spheres don't harm evil elementals rule): now the noun is off-stage; say "A bolt of energy sends [the noun] careening sharply away. [Capitalized subject pronoun of the noun] vanishes into the void." Instead of throwing something at an evil elemental when the noun is the antisphere of the second noun (this is the antispheres wipe out energy spheres rule): now the noun is off-stage; now the second noun is off-stage; say the dissolution message of the second noun with an extra line break. [Note that the structure of the following rule is really not very smooth, but none of the other alternatives tried would compile.] Instead of doing something when an evil elemental is at hand and the current action is generic life behavior (this is the generic energy sphere generic life rule): if the noun is not an evil elemental and the second noun is not an evil elemental: do nothing; continue the action; otherwise if the noun is an evil elemental: say "The [energy color of noun] sphere is unresponsive."; otherwise if the second noun is an evil elemental: say "The [energy color of second noun] sphere is unresponsive." Section - Windcat [Note that the only windcats implemented in the original were done as two separate objects with many identical properties. They are treated as a class in this implementation. In addition, the author wanted to implement these as actual animals, so they are given a separate body part called a neck to act as the supporter that the windcats themselves were in the original source code. (See WWI 4.14.)] Understand "windcat" or "wind cat" or "cat" as "[windcat]". Understand "windcats" or "wind cats" or "cats" as "[windcats]". A windcat is a kind of animal. Understand "[windcat]" or "itself" as a windcat. Understand "[windcats]" as the plural of windcat. After printing the name of a windcat while asking which do you mean (this is the append itself to windcats when disambiguating rule): say " itself". Understand "cat's" or "wind cat's" as "[windcat-possessive]". Understand "neck" or "throat" as "[neck]". A neck is a kind of supporter. A neck is part of every windcat. A neck is always animal-like. The carrying capacity of a neck is 1. Understand "[neck]" or "[windcat-possessive]" as a neck. Understand "paws" or "paw" as "[paws]". Some paws are a kind of thing. Some paws are part of every windcat. Some paws are usually plural-named. Some paws are always animal-like. Understand "[paws]" or "[windcat-possessive]" as some paws. [There's a minor issue with the windcats: There didn't seem to be a way to get the parser to pick a specific thing (windcat as a whole, paw, or neck), even though several variations of "does the player mean" rules were tried. Thus, a command like ">put blue flag on spotted" always received a disambiguation question: "Which do you mean, the spotted windcat itself, the spotted windcat's neck or the spotted windcat's paws?" This is easy enough to get around and I don't think it will be a memorable issue for most players, but it was irksome.] [IMPDO - if this doesn't work in post-6G60 revisions, try to get around this by modifying name-recognition elements? privately-name pieces and only allow the full printed name of the parent to refer to it? create coat pattern kind of value for spotted/speckled and allow that to refer to only the main windcat type if used on a standalone basis?] To indicate the windcat's lack of cooperation: say "The windcat hisses and struggles until you desist." Instead of taking a windcat (this is the windcats are not pets rule): indicate the windcat's lack of cooperation. Instead of tying something to a windcat (this is the reroute tying things to a windcat to tying it to windcat's neck rule): let targeted neck be a random neck that is part of the second noun; try tying the noun to the targeted neck instead. Instead of tying something to a neck (this is the reroute tying things to a windcat's neck to putting it on windcat's neck rule): try putting the noun on the second noun instead. Instead of putting something on a windcat (this is the reroute putting things on a windcat to putting it on its neck rule): let decorated neck be a random neck that is part of the second noun; try putting the noun on the decorated neck instead. To indicate the windcat's lack of appreciation: say "I don't think the windcat would appreciate that." Instead of putting something that is not a flag on a windcat's neck (this is the windcats only carry flags rule): indicate the windcat's lack of appreciation. Instead of putting something on some paws (this is the cat's don't like covered feet rule): indicate the windcat's lack of appreciation. Instead of tying something to some paws (this is the cat's don't dig socks rule): indicate the windcat's lack of cooperation. Instead of pushing or pulling or attacking or squeezing or turning a windcat (this is the windcats don't like mishandling rule): indicate the windcat's lack of appreciation. Instead of pushing or pulling or attacking or squeezing or turning something incorporated by a windcat (this is the windcats don't like mishandling of their parts either rule): indicate the windcat's lack of cooperation. After putting something on a neck (this is the give a little flavor to cat interaction rule): say "[one of]With remarkably little fuss, y[or]Y[stopping]ou tie [a noun] loosely around [the second noun]." [Note: In the original code, this was implemented via an I6 'Before' function. Since it does not seem intended to short-circuit the action, an I7 after rule is used here.] After rubbing or touching a windcat (this is the windcats can be petted rule), say "The windcat purrs." Chapter - New Relations [Note that relations applicable to only Barsap's Gambit or the Great Underground Subway (GUS) system can be found in their respective parts.] Section - Bearing Bearing relates a person (called bearer) to a thing (called bearee) when the bearer encloses the bearee and the bearee is not part of the bearer. The verb to bear (he bears, they bear, he bore it, it is born, he is bearing) implies the bearing relation. Section - Cataloguing [The need to relate "immaterial" (non-thing) spells to a material thing (in this case, the prayer book) drives the need for a new relation.] Cataloguing relates one thing (called the catalogue) to various spells. The verb to record (he records, they record, it recorded, it is recorded, he is recording) implies the cataloguing relation. Section - Inscription [Again, since spells are declared as objects instead of things, they can't be used with the incorporation relation. This relation links spells to the scrolls they're "on".] Inscription relates one spell (called the lesson) to various scrolls. [Allows more than one scroll to teach a given spell, if desired.] The verb to be inscribed upon implies the inscription relation. The verb to be inscribed with implies the reversed inscription relation. Section - Recalling [Here we create a relation to be used in implementing the PC's spell memory, requiring a relation between immaterial objects.] Recalling relates one memory to various spells. The verb to recall (he recalls, they recall, it recalled, it is recalled, he is recalling) implies the recalling relation. The verb to be remembered by implies the reversed recalling relation. Section - Recognition [This is intended to allow NPCs to know about certain things in the world during discussions. See the section on "Asking It About" for usage.] Recognition relates various people to various things. The verb to recognize (he recognizes, they recognize, it recognized, it is recognized, he is recognizing) implies the recognition relation. The verb to be acquainted with implies the reversed recognition relation. Chapter - New Phrases Section - Ending the game in death / victory [These are not really new phrases, but they are deprecated phrases in I7 6G60. If you are trying to compile this in a later version, uncommenting the following (from the suggested equivalent in WWI 9.4) may help.] [ To end the game in death: end the story saying "You have died" ] [ To end the game in victory: end the story finally saying "You have won" ] Section - Saying something with an extra line break [If the final "say" command says a text property and not actual text, the default behavior in 6G60 seems to be to not add an extra line break even if the output text ends with the kind of punctuation that would generate an extra line break if just plain text is "said." This phrase is purely cosmetic in that it takes away the need to say an extra line break with a separate line in such cases.] To say (output - text) with an extra line break: say output; say "[line break]". Section - Saying Spiritwrak-style contents list for something [Spiritwrak used a "vertical" style of listing contents that is not common today. The original source code behavior used the I6 WriteListFrom function, which receives an object as its parameter, and at first it seemed like it would be necessary to reproduce something similar here. Fortunately, the built-in I7 phrase "list the contents of..." offers all of the functional options in a more readable format than the I6 equivalent. See Recipe Book Ex 177 Equipment List, and WWI 11.14 and 25.16. The author believes that the current version emulates all instances where this style can be found in Spiritwrak 3/960606. Feel free to report any inconsistencies.] To say Spiritwrak-style contents list for (O - an object): list the contents of O, with newlines, indented, giving inventory information, including contents, and with extra indentation. Section - Saying Spiritwrak-style contents description for something [Several objects used identical routines, so this default display mode was created.] To say Spiritwrak-style contents description for (O - an object): if O is empty: say "It is also empty."; else if exactly one thing is in O: say "Inside is [a list of things in O]."; else: say "Inside are:[paragraph break][Spiritwrak-style contents list for O]". Section - Saying is-are vault-style list of contents of something [Used by objects under chapter"Abandoned Bank" under part "Fublio Valley".] To say is-are vault-style list of contents of (O - an object): list the contents of O, giving inventory information, as a sentence, prefacing with is/are. Chapter - New Phrases to Decide Section - N is between X and Y To decide whether (tested number - a number) is between (lower bound - a number) and (upper bound - a number): if tested number is less than lower bound, no; if tested number is greater than upper bound, no; decide yes. Section - Only X is in Y To decide if only (singular item - a thing) is/are in (unfilled basket - a container): if something that is not singular item is in unfilled basket: decide no; otherwise: decide yes. Section - Only X is on Y To decide if only (singular item - a thing) is/are on (unfilled table - a supporter): if something that is not singular item is on unfilled table: decide no; otherwise: decide yes. Chapter - New Actions Section - Asking for Game Help (HelpSub) Asking for game help is an action out of world. Understand "help" or "hint" as asking for game help. Report asking for game help (this is the default asking for game help rule): say "Hello Player![paragraph break]SPIRITWRAK, An Interactive Fantasy Adventure[line break]If you're new to interactive fiction games, I lack the space here to give an adequate description, but in short, you're a character in a story, able to interact with objects, places and other things (using regular English sentences) in order to reach your goal, which is to figure out how to 'solve' the story. For a real description, you might want to check out documents located at ftp.gmd.de.[paragraph break]For those more experienced players, if you're looking for on-line clues, etc., sadly, you won't find them (the Z5 code is getting rather obscenely large as I write this). A short verb list is contained in the README file that you should have received with this game (or should be able to find at the same place you found this game). Beyond that, if you're truly desperate, you can post a note on the rec.arts.int-fiction usenet newsgroup, or send me email.[paragraph break]Thanks for playing![paragraph break]-- D. S. Yu [bracket]dsyu@64holonet.net[close bracket][paragraph break]"; say "[paragraph break][italic type]P.S. The original 'Spiritwrak' was published in 1996, and the online resources for interactive fiction have improved tremendously in the ensuing years. New players are especially directed to look for the 'quick reference' card that should have been distributed with this game (but is also available at http://pr-if.org), which will help you quickly grow accustomed to the standard conventions of how to interact with the parser.[paragraph break]If you are enjoying this and would like to try other text-based games, the IFDB (Interactive Fiction Database) at http://ifdb.tads.org is a very full-featured website offering thousands of works new and old, with reviews and ratings to help you select the ones that best match your tastes.[paragraph break]Should you find yourself so fascinated with this stuff that you would like to try your hand authoring your own work, there are many languages from which to choose. Inform 7 (http://www.inform7.com), the language used for this port, is particularly recommended for those that don't count themselves as programmers.[paragraph break]-- Otis the Dog [bracket]otistdog@hotmail.com[close bracket][roman type][paragraph break]" Section - Begging (BegSub) Begging is an action applying to nothing. Understand "beg" as begging. Report begging (this is the default report begging rule): say "Please, no begging." Section - Casting / Casting It At (CastOneSub, CastSub, spell_block) [Per the comment of Mr. Yu in the provided source code for "Spiritwrak," the spell-casting system is drawn from the published source code of Graham Nelson's "Curses". This is very interesting reading in that it's pretty arcane code and you can learn a lot about the I6 layer while deciphering it, including the existence of some functions not mentioned in DM4 (such as 'ResetVagueWords()', which may equivalent to the documented I6 'PronounNotice()' function, or 'RunRoutines()', which presumably calls a specific routine of an object, or 'Refers()', which presumable checks whether a given word parses as a name for a given object similar to documented functions on DM4 p. 255). It's not clear whether these are undocumented features of the default Inform library at that point, or they required a non-standard library that isn't mentioned in comments, but they are not defined elsewhere in the source code provided by Mr. Yu. Since the underpinnings of I7 are quite different, this implementation does not attempt to replicate the original functions step-by-step, but tries to "I7-ize" the implicit concepts in the most elegant (or at least readable) way. Some notes about the original structure and particular reasoning in the translation of it: * The process of casting was split into two different I6 Actions, Cast and CastOne. The CastOne action could not be invoked directly by player input, as it used an "untypeable"(see DM4 pp. 207-208) word including a comma ("c,cast"), which even if typed by the player does not survive as a single word in the normal parsing process. CastOne actions were instead generated by the UnknownVerb() function when the player used the traditional Infocom-style spellcasting syntax of "[spellname] [target]" (e.g. ">frotz lamp"). Cast actions would remove the spell from the PC's memory, work out whether the casting would succeed, adjust pronouns based on the spell's target (i.e. the second noun) and finally execute the routine assigned to the spell's 'magic' property (indicating nothing happens if that routine returned 0, i.e. it was not a defined property for the spell object or specifically returned false). Both versions of the action stashed the spell in a global variable called 'the_spell_was', which was useful within various objects' Before() routines intercepting a Cast action. Here, we also have two versions of the casting action, but this is to differentiate between times when need an indirect object (casting it at) and times we don't (casting), which seemed preferable to trying to use just one action with accompanying rules for supplying the missing noun (but might not be). Check rules determine whether the spell will work or not and adjust the PC's memory. Both types of casting make use of the same shared rules. The equivalent of 'the_spell_was' is not necessary in constructing rules, which can include reference to specific spells in their preambles. * An I6 'ParserError()' routine (see DM4 p. 237) is defined to assist in handling parser errors, apparently with the intent of responding to commands involving spells in a way that prevents players from guessing what real spells there might be. In fact, most of the machinery of this routine seems to be bypassed in Spiritwrak release 3/960606, but an attempt is made to restore its function here since having it seems to have been Mr. Yu's intent. To simplify things slightly, the same response is used whether the player is attempting to cast or learn the unknown spell; it should be very easy to separate these cases, if desired. * The I6 'InScope()' entry point is defined (see DM4 p. 235), to always add to scope the spells that are in the 'memory' object during casting. This is handled here through use of the "any" keyword in the understand declarations for the grammar of casting commands (See WWI 16.7). * An I6 'UnknownVerb()' function is defined (see DM4 p. 220) to set the verb to 'c,cast' (i.e. CastOne action) if the verb word is the name of a spell in the memory object (i.e. memorized). An I6 'PrintVerb()' routine (see DM4 pp. 434 and 482) is defined for the 'c,cast' verb to mask its presence. Here the equivalent is achieved by directly modifying the player's command to use the desired "cast ", "cast " or "cast at " syntax (see WWI 17.31). * Many actions, including Cast, made use of an I6 scope routine (DM4 pp. 233-235) within their grammar lines, to ensure that spells were in scope if needed. This routine, called 'ReadableSpell()' has no direct equivalent here, but is handled through a combination of the known/unknown property for spells and the use of "any" in understand line tokens for the relevant actions.] Casting it at is an action applying to one object and one object. Understand "cast [any known spell] at/on [something]" or "cast [any known spell] [something]" as casting it at. Casting is an action applying to one object. Understand "cast [any known spell]" as casting. This is the can't cast spells not in memory rule: say "You haven't prepared that chant." instead. [Note that the ordering of the various check rules is important, so some ordering declarations are made to override the natural sorting order. Although they might have been more readable as code if order-sensitive checks were grouped together into one large rule, they would not provide as much feedback when debugging as individually-named rules do. Also note that the placement of the "can't cast when spellcasting blocked" and "can't cast it at when spellcasting blocked" rules first creates a slight difference from release 3/960606: Attempts to cast spells while spellcasting is blocked do not consume a spell memorization in this version. Since that seems both unlikely to impact gameplay in a meaningful way and also slightly fairer to the player, this difference will stand.] First check casting while spellcasting-blocked is true (this is the can't cast when spellcasting blocked rule): abide by the chants don't work when spellcasting is blocked rule. First check casting it at while spellcasting-blocked is true (this is the can't cast it at when spellcasting blocked rule): abide by the chants don't work when spellcasting is blocked rule. Check casting (this is the can't cast if not memorized rule): if the noun is a forgotten temporarily-learned simple spell: abide by the can't cast spells not in memory rule. The can't cast if not memorized rule is listed after the can't cast when spellcasting blocked rule in the check casting rules. Check casting it at (this is the can't cast it at if not memorized rule): if the noun is a forgotten temporarily-learned simple spell: abide by the can't cast spells not in memory rule. The can't cast it at if not memorized rule is listed after the can't cast it at when spellcasting blocked rule in the check casting it at rules. This is the casting attempts always consume memorized spells rule: remove the noun from memory. [See "Short-Term Retention" section for details on phrase.] Check casting a memorized spell (this is the trying to cast a temporarily-learned spell always uses it up rule): consider the casting attempts always consume memorized spells rule; continue the action. The trying to cast a temporarily-learned spell always uses it up rule is listed after the can't cast if not memorized rule in the check casting rules. [Note the need to specify "at an object" instead of "at something" so that the rule will be fired when trying something like ">frotz west". Otherwise, it won't apply, since a direction is not a thing.] Check casting a memorized spell at an object (this is the trying to cast a temporarily-learned spell at something always uses it up rule): consider the casting attempts always consume memorized spells rule; set pronouns from the second noun; [This ensures that the pronoun "it" will be set to the target of the noun instead of the spell after casting.] continue the action. The trying to cast a temporarily-learned spell at something always uses it up rule is listed after the can't cast it at if not memorized rule in the check casting it at rules. Spellcasting-blocked is a truth state that varies. [equivalent to global variable spell_block in original] To engage spell blocking: now spellcasting-blocked is true. To disengage spell blocking: now spellcasting-blocked is false. This is the chants don't work when spellcasting is blocked rule: say "Currently, your mystic powers don't seem to be working." instead. [Note that the following rules about casting in Hades can never apply in a normal game as currently constructed, because the PC won't have the holy amulet in Hades. Also, in the original, spellcasting is prevented in Hades due to action restrictions. However, the original source code implies the intent that spellcasting be obstructed in Hades, so here it is. Note that this rule currently fires before the "try to cast... always uses it up" rules so memorized spells are preserved, which experiment shows is what happens in release 3/960606.] This is the can't cast in Hades rule: say "You try to speak the words of the spell, but [first time]you discover that [only]you have no voice..." instead. Instead of casting a spell at something when the location is in Fiery Realm (this is the can't cast it at while in underworld rule): abide by the can't cast in Hades rule. The can't cast it at while in underworld rule is listed before the the out-of-body experience limits actions rule in the instead rules. Instead of casting when the location is in Fiery Realm (this is the can't cast while in underworld rule): abide by the can't cast in Hades rule. The can't cast while in underworld rule is listed before the the out-of-body experience limits actions rule in the instead rules. This is the need amulet to channel mystical power rule: say "You speak the chant, but you can't seem to marshal the mystical power to make it work." instead. Check casting when the player does not wear the holy amulet (this is the need amulet for casting rule): abide by the need amulet to channel mystical power rule. The need amulet for casting rule is listed after the trying to cast a temporarily-learned spell always uses it up rule in the check casting rules. Check casting it at when the player does not wear the holy amulet (this is the need amulet for casting it at rule): abide by the need amulet to channel mystical power rule. The need amulet for casting it at rule is listed after the trying to cast a temporarily-learned spell at something always uses it up rule in the check casting it at rules. Check casting a complex spell when the player does not carry a scroll inscribed with the noun (this is the need immediately-available inscription of a complex spell to cast it rule): say "Without reference to a scroll bearing a complex spell such as that one, there is no way to cast it." instead. The need immediately-available inscription of a complex spell to cast it rule is listed after the need amulet for casting rule in the check casting rules. Check casting a complex spell at something when the player does not carry a scroll inscribed with the noun (this is the need immediately-available inscription of a complex spell to cast it at rule): say "Without reference to a scroll bearing a complex spell such as that one, there is no way to cast it at [the second noun]." instead. The need immediately-available inscription of a complex spell to cast it at rule is listed after the need amulet for casting it at rule in the check casting it at rules. [Note that the logical equivalent of this rule in the original is somewhat different. The random spell failures are bothersome, to say the least, but there is some justification to their occurrence when the PC is new and inexperienced. Rather than edit them out completely, the frequency of their occurrence is made dependent on the total score, so that they will happen much less often after the first third of the game. See the every turn rule towards the end of this section.] Initial spell failure percentage is a number that varies. Initial spell failure percentage is 40. Spell failure percentage is a number that varies. [see end of section for rule modifying this] When play begins (this is the set spell failure percentage from initial value rule): now spell failure percentage is initial spell failure percentage. This is the sometimes chants arbitrarily fail rule: let k be a random number from 1 to 100; [ say "(failure chance = [spell failure percentage]%, random roll = [k]/100)";] if the noun is complex: if k is at most spell failure percentage: say "Your tongue gets twisted trying to pronounce one of the more difficult words in the highly complex spell, and you are forced to stop." instead; otherwise: if k is at most spell failure percentage divided by 3: [integer math!] say "You speak the chant, but the Gods are not kind this time, and nothing happens[first time]. You wonder what it was like when magic was more reliable, before the Change[only]." instead; otherwise if k is at most spell failure percentage: say "You speak the chant, but something sounds wrong. Nothing happens this time[first time].[paragraph break]One of Brother Toolbox's interminable lectures about spellcasting surfaces in your memory. 'Magical words can be quite complex. Like everything else, practice makes perfect.' Of course, he never said [italic type]how much[roman type] practice[only]." instead; continue the action. Check casting a spell (this is the casting is subject to the whim of the gods and proper pronunciation rule): abide by the sometimes chants arbitrarily fail rule. The casting is subject to the whim of the gods and proper pronunciation rule is listed after the need immediately-available inscription of a complex spell to cast it rule in the check casting rules. Check casting a spell at something (this is the casting it at is subject to the whim of the gods and proper pronunciation rule): abide by the sometimes chants arbitrarily fail rule. The casting it at is subject to the whim of the gods and proper pronunciation rule is listed after the need immediately-available inscription of a complex spell to cast it at rule in the check casting it at rules. To indicate destruction of (spellbearing item - a scroll): remove the spellbearing item from play; say "As you complete the long and complicated spell, [the spellbearing item] bearing it vanishes!" Check casting a complex spell (this is the successful casting attempt of a complex scroll destroys its inscription rule): let evaporated vessel be a random player-carried scroll inscribed with the noun; indicate destruction of the evaporated vessel. The successful casting attempt of a complex scroll destroys its inscription rule is listed after the casting is subject to the whim of the gods and proper pronunciation rule in the check casting rules. Check casting a complex spell at something (this is the successful casting it at attempt of a complex scroll destroys its inscription rule): let evaporated vessel be a random player-carried scroll inscribed with the noun; indicate destruction of the evaporated vessel. The successful casting it at attempt of a complex scroll destroys its inscription rule is listed after the casting it at is subject to the whim of the gods and proper pronunciation rule in the check casting it at rules. To indicate generic spell failure: say "Your chant goes unanswered." To indicate no spell effect: say "Nothing happens." [Again, need to specify "at an object" to make sure the rule applies when the second noun is a direction.] Report casting a spell at an object (this is the test casting it at syntax rule): [ say "spell cast: [noun] -> [second noun]."] say "Nothing happens." Report casting a spell (this is the test casting syntax rule): [ say "spell cast: [noun]."] say "Nothing happens." [Note that the plain "casting" action has no equivalent for this next rule.] First after casting a spell at an object (this is the spells don't work on directions rule): if the second noun is not a direction: continue the action; otherwise: say "The chant fails. You must cast it at something, not in a direction." [Note: The following parser error handling rules are designed to mimic the "Curses"-style masking of valid spell names that the PC should not now know about yet, while also mimicking the Infocom-style declaration of unknown words. It is thus occasionally necessary for the game to mask the fact that spell names can be found in the internal dictionary.] Rule for printing a parser error when the latest parser error is the not a verb I recognise error (this is the mask validity of unknown spell names rule): let masked-verb be punctuated word number verb word number in the player's command; [ say "(verb word number = [verb word number], command = '[player's command]')";] say "I don't recognize the verb '[masked-verb]'." [Note that the don't know that verb rule referenced in the following comes from the "Infocom-Style Unknown Word Error" extension.] The mask validity of unknown spell names rule is listed before the don't know that verb rule in the for printing a parser error rules. [Note that the original logic (from Graham Nelson's "Balances") on which this the following function is modeled would handle the word "copy" in a manner similar to "cast" or "learn". Since release 3/960606 of "Spiritwrak" did not handle the "copy" verb, this case is intentionally left out.] To decide which number is parser evaluation halt point: (- (wn) -) To decide which number is oops position: (- (oops_from) -) To decide which number is saved oops position: (- (saved_oops) -) [an undocumented global variable, dangerous to rely on it!] To decide which number is nouns list start position: decide on verb word number plus one. [right after verb word number in command] To decide if it appears that a multi-spell token evaluation has failed: if saved oops position is greater than nouns list start position: decide yes; otherwise: decide no. Rule for printing a parser error when the latest parser error is the noun did not make sense in that context error (this is the maybe that is a spell and maybe that isn't rule): let masking trigger verb be the verb word; if masking trigger verb is "cast" or masking trigger verb is "learn" or masking trigger verb is "prepare" or masking trigger verb is "memorize" or masking trigger verb is "memorise": let premature spell position be the nouns list start position; [ say "(verb_word = [verb word], N = [premature spell position])";] let masked-noun be punctuated word number premature spell position in the player's command; if it appears that a multi-spell token evaluation has failed: [override for multi-spell token failures as this will otherwise report the first spell name even if it is legitimate] now masked-noun is punctuated word number saved oops position in the player's command; if masked-noun is "and": say "[italic type][bold type]Editor's note[italic type]: Due to a long-standing issue in Inform 6, you are not able to use the serial comma (also known as the Oxford comma or series comma) in defining a list of things in your command, e.g. '[roman type]>LEARN GNUSTO, FROTZ, AND NOSLEN[italic type]', as it appears you may have done here. The same command without the final comma should work, e.g. '[roman type]>LEARN GNUSTO, FROTZ AND NOSLEN[italic type]'.)[roman type][paragraph break]"; otherwise: say "You've never heard of the '[masked-noun]' chant, if indeed it is a chant."; otherwise: [ say "(leaving maybe that is a spell and maybe that isn't with no decision)";] make no decision. [originally "do nothing" but this seems to work] [Note that the don't know that word rule referenced in the following comes from the "Infocom-Style Unknown Word Error" extension.] Rule for printing a parser error when the latest parser error is the can't see any such thing error (this is the replacement don't know that word rule): let N be the position of the non-dictionary word; let bad-word be punctuated word number N in the player's command; let masked-spell be indexed text; let spell-matched be false; let Q be the nouns list start position; let t be Q; while t is at most the number of punctuated words in the player's command: repeat with searched spell running through unknown spells: let suspected-spell be punctuated word number t in the player's command; if suspected-spell is the printed name of searched spell: now spell-matched is true; break; if spell-matched is true: let masked-spell be punctuated word number t in the player's command; break; increment t; [ say "(N = [N], bad-word = [bad-word] / Q = [Q], t = [t], masked-spell = [masked-spell] / spell-matched = [spell-matched])";] if spell-matched is false and N is zero: [ say "(leaving replacement don't know that word rule with no decision)";] make no decision; otherwise if spell-matched is true and (N is zero or (N is not zero and t is less than N)): say "I don't know the word '[masked-spell]'."; otherwise: say "I don't know the word '[bad-word]'.". The replacement don't know that word rule is listed instead of the don't know that word rule in the for printing a parser error rulebook. After reading a command (this is the try to restructure spell-oriented syntax to cast-oriented syntax rule): [ say "(now looking for casting syntax)";] let T be indexed text; let T be the player's command; let spell name observed be a truth state; now spell name observed is false; repeat with scanned spell running through known spells: if T matches the regular expression "[printed name of scanned spell]": now spell name observed is true; [ say "(matched spell: [printed name of scanned spell])";] [ say "(potential spell-oriented casting command seen as '[T]', with original command of '[player's command]')";] [ say "(looking for matches to '[printed name of scanned spell]' in '[T]')";] let N be the number of times T matches the regular expression "(^|\.|then)(\s*)([printed name of scanned spell])" ; if N is greater than zero: replace the regular expression "(^|\.|then)(\s*)([printed name of scanned spell])" in T with "\1\2cast \3"; [ say "(command after first replacement pass [bracket]' ...' or '... . ' or '... then '[close bracket] is '[T]')";] let N be the number of times T matches the regular expression "(\.|^)(?!(<^\.\,>*)(learn|cast|memorize|memorise))(<^\.\,>*?)(\,)(\s*)([printed name of scanned spell])" ; [need to update this if additional synonyms for "learn" or "cast" added] if N is greater than zero: replace the regular expression "(\.|^)(?!(<^\.\,>*)(learn|cast|memorize|memorise))(<^\.\,>*?)(\,)(\s*)([printed name of scanned spell])" in T with "\1\2\3\4\5\6cast \7"; [need to update this if additional synonyms for "learn" or "cast" added] [ say "(command after second replacement pass [bracket]'apprentice, '[close bracket] is '[T]')";] if spell name observed is true: [ say "(final state of T = [T])";] change the text of the player's command to T; [ say "(new command = '[player's command]')";] otherwise: [ say "(no spell-oriented casting attempt seen)";] do nothing. [KEEP - Following is the original ParserError() function from Spiritwrak 3/960606, with annotations in comments added here. ParserError x i flag vb; if (etype==VERB_PE or ASKSCOPE_PE) [if it's the "not a verb I recognize" error or a failed scope rule error] { if (etype==ASKSCOPE_PE) [if it's a failed scope error] { if (verb_word=='cast') vb=1; [if the first word of command is "cast", set vb to 1] if (verb_word=='learn' or 'memorise' or 'memorize') vb=2; [if the first word is a synonym of "learn", set vb to 2] if (verb_word=='copy') vb=3; [if the first word is "copy" (unused?), set vb to 3] if (vb==0) { etype=CANTSEE_PE; rfalse; } [if not one of cases above, change parser error to "can't see any such thing" and exit to print usual message for that error] } wn=verb_wordnum; if (vb~=0) wn++; [set wn to the position of the verb in command, if a non-zero vb code advance one more] x=NextWordStopped(); [set x to the next word of player's command] for (i=player+1:i<=top_object:i++) [not clear but seems to look for all author-defined objects, assuming player is the default top of library-provided objects and 'top_object' is a library variable for the highest object identifier] if (i has is_spell && Refers(i,x)==1 && i has known_about) flag=1; [if I is a spell and the mystery word refers to it and it is known, set flag meaning "it's a usable spell word"] if (flag==1) [if it's a usable spell word...] { if (vb==0 or 1) [...and the verb is casting] "You don't have that chant prepared. [Type 'spells' or 'chants' to see what you do have prepared.]"; if (vb==2) [...and the verb is learning] "Your training is such that you can only prepare such a chant with the aid of a prayer book containing it."; if (vb==3) [... and the verb is copying] "You have no text of that chant to copy."; } if (vb==1) [if it's not a usable spell word and trying to cast it] "You haven't prepared that chant, if indeed it is a chant."; if (vb==2 or 3) [if it's not a usable spell word and trying to learn or copy it] "You haven't access to that chant, if indeed it is a chant."; } rfalse; [not a handled error type, so print usual message] ]; Every turn when we have prayed (this is the perfunctory piety reduces spellcasting unrely-ity rule): let midscore be the maximum score divided by 3; let reduction value be the score multiplied by 30 divided by the midscore; let target failure percentage be the initial spell failure percentage minus reduction value; if target failure percentage is less than one: now target failure percentage is 1; now spell failure percentage is target failure percentage. Section - Diagnosing Oneself (DiagnoseSub) Diagnosing oneself is an action applying to nothing. Understand "diagnose" or "health" or "status" as diagnosing oneself. Report diagnosing oneself (this is the default report diagnosing oneself rule): if the current hit points of the player is greater than the maximum hit points of the player: say "You feel superhuman!"; [This should never happen.] otherwise if the current hit points of the player is the maximum hit points of the player: say "You are in good health."; otherwise if the current hit points of the player is one: say "You are near death's door."; otherwise if the current hit points of the player is less than 5: say "You feel extremely weak."; otherwise if the current hit points of the player is less than 10: say "You feel weak."; otherwise: let max-to-current ratio be the maximum hit points of the player divided by the current hit points of the player; if max-to-current ratio is at least 4: say "You feel slightly weak"; otherwise if max-to-current ratio is at least 2: say "You've been better, but you'll be okay."; otherwise: say "You feel okay." Section - Disembarking Disembarking is an action applying to one thing. Understand "exit [something]" or "get out of [something]" or "disembark [something]" or "leave in/through/inside [something]" as disembarking. Understand "disembark" as exiting. Understand the command "debark" as "disembark". Rule for supplying a missing noun while disembarking (this is the assume disembarking from holder of the player if no noun specified rule): now the noun is the holder of the player. Instead of disembarking the holder of the player (this is the interpret disembarking the holder of the player as normal exiting rule): try exiting instead. Check disembarking when the noun encloses the player and the noun is not the holder of the player (this is the can't exit multiple things at once rule): say "To do that, you'll first need to get out of [the holder of the player]."; rule fails. Check disembarking when the noun does not enclose the player (this is the can't disembark when not in it rule): say "But you aren't in [the noun] at the moment."; rule fails. Section - Enumerating Learned Spells (SpellsSub) Enumerating learned spells is an action applying to nothing. Understand "spells" or "chants" or "memory" as enumerating learned spells. Check enumerating learned spells when spellcasting-blocked is true (this is the spell blocking prevents enumerating learned spells rule): abide by the chants don't work when spellcasting is blocked rule. [See "Casting / Casting It At" section.] Report enumerating learned spells (this is the default report enumerating learned spells rule): let permanent spells known be the list of permanently-learned spells remembered by the short-term retention; let permanent spell count be the number of entries in permanent spells known; let temporary spells known be the list of temporarily-learned spells remembered by the short-term retention; let temporary spell count be the number of entries in temporary spells known; let distinct spells known be permanent spell count plus temporary spell count; if distinct spells known is at least 1: if permanent spell count is at least 1: say "The [permanent spells known] chant[if permanent spell count is at least 2]s are[else] is[end if] yours forever. [run paragraph on]"; if temporary spell count is at least 1: say "[if the permanent spell count is at least 1]Other than that, y[else]Y[end if]ou have the [temporary spells known] prepared."; otherwise: say "Other than that, you have no chants prepared."; otherwise: say "You have no chants prepared." After printing the name of a temporarily-learned spell (called armed spell) while the current action is enumerating learned spells (this is the suffix spells with counts when enumerating learned spells rule): say " chant[if the memorization count of armed spell is at least 2] ([approximate ordinal of memorization count of armed spell])[end if]". To say approximate ordinal of (N - a number): if N is: -- 0: say "zero"; -- 1: say "once"; -- 2: say "twice"; -- 3: say "thrice"; -- 4: say "four times"; -- otherwise: say "many times". Section - Folding (FoldSub) Folding is an action applying to one thing. Understand "fold [something]" as folding. Understand the commands "bend" or "flex" as "fold". To indicate a nonsensical action: say "I fail to see what you're trying to accomplish by doing this." Report folding (this is the default report folding rule): indicate a nonsensical action. Section - Forgetting [During playtesting I sometimes wished I could get rid of spells without having to cast them. This command, not found in the original source code, is the result.] Forgetting is an action applying to one object. Understand "forget [any known spell]" as forgetting. Understand the commands "erase" or "purge" as "forget". Check forgetting when spellcasting-blocked is true (this is the can't forget spells when spell block engaged rule): abide by the chants don't work when spellcasting is blocked rule. [See "Casting / Casting It At" section.] Check forgetting a permanently-learned spell (this is the can't forget permanently-learned spells rule): say "That chant has been so burned into your memory that forgetting it is impossible." instead. Check forgetting a temporarily-learned spell when the short-term retention does not recall the noun (this is the can't forget chants not memorized rule): say "You seem to have forgotten that chant already." instead. Carry out forgetting (this is the default carry out forgetting rule): now the memorization count of the noun is zero; eject the noun from memory. [See "Short-Term Retention" section for details on phrase.] Report forgetting (this is the default report forgetting rule): say "With a well-honed skill born of too much cramming during seminary school, you quickly purge the [noun] chant from your memory." Section - Greeting [This action is not a direct translation from the original, per se, but a number of the NPC objects in the original include I6 'Life()' routine logic that checks the value of a variable called 'special_word' and responds in a way that indicates a reply to a greeting. Interestingly, the 'special_word' variable is not mentioned anywhere in DM4 nor is it called out in any defined routines within the release 3 source code provided by Mr. Yu. Presumably, it is either a deprecated or undocumented feature of earlier versions of Inform. The way that it is used implies that it would be set with the first word in the topic portion of a command generating an I6 Answer action. This action is created to allow similar responses in this implementation but to give the flexibility to interpret more varied versions of greetings consistently. Instead rules redirect attempts to say greetings using formats such as: >say hello to monster or >monster, hello as the player prefers.] Undirected greeting is an action applying to nothing. Understand "hello" or "hello there" or "hi" or "hi there" or "hey" or "hey there" or "how do" or "how do you do" or "how are you" as greeting. [The list of accepted command phrasings intentionally does not use the "[greeting phrase]" token, because doing so caused some parser weirdness that threw off the "Infocom-Style Unknown Word Error" extension's function. It appeared that perhaps the verbword_num was not being set, and the type of parser error being triggered was different. Accepting this bit of inelegance seems unavoidable at the author's current skill level.] Greeting is an action applying to one visible thing. Understand "greet [something]" or "hello [something]" or "hello there [something]" or "hi [something]" or "hi there [something]" or "hey [something]" or "hey there [something]" or "how do [something]" or "how do you do [something]" or "how are you [something]" as greeting. Understand "hello" or "hello there" or "hi" or "hi there" or "hey" or "hey there" or "how do" or "how do you do" or "how are you" as "[greeting phrase]". Rule for supplying a missing noun while an actor greeting (this is the assume we greet ourselves rule): now the noun is the player. Instead of greeting the player (this is the interpret greeting the player as asking for game help rule): try asking for game help instead. Instead of answering something that "[greeting phrase]" (this is the redirect saying to syntax greeting to greeting action rule): try greeting the noun instead. Instead of asking someone (called salutee) to try greeting the player (this is the redirect command syntax greeting to greeting action rule): try greeting the salutee instead. Report greeting (this is the default report greeting rule): say "[The noun] [if the noun is singular-named]does[else]do[end if] not acknowledge your greeting." Section - Hiding In [This action is not in the original, but it seems appropriate for at least one scene (Celestial Apartment) and is provided as a nicety to the player. Note that the one-word grammar "hide" must be provided to allow the rule for supplying a missing noun to take effect. Otherwise, the parser will try to fill in the blank while processing the player's command.] Hiding in is an action applying to one touchable thing. Understand "hide" or "hide behind [something]" or "hide inside [something]" or "hide in [something]" as hiding in. Rule for supplying a missing noun while hiding in (this is the seek shelter in enterable containers when hiding rule): if an enterable container is at hand: now the noun is a random enterable at hand container; say "([first time]maybe [only]behind [the noun][one of]?)[or])[stopping][command clarification break]"; otherwise: now the noun is the location. Instead of hiding in an enterable container (this is the treat hiding in an enterable container as entering it rule): try entering the noun instead. Check hiding in a room (this is the there's nowhere to run to nowhere to hide rule): say "There doesn't seem to be any good place to do so!" instead. Report hiding in something (this is the standard report hiding rule): say "You cower behind [the noun], to no useful effect." Section - Joining It To (JoinSub) [This new verb was defined in the original source code, so the same approach is used here. A more expedient path might have been to make use of the built-in tying it to action. As a side note, this section contains the only instance of a procedural rule you will find in this implementation. While I understand the motivation for removing these powerful features for the sake of clarity of the code, this example shows how it can really matter if the author wants to create the ability for a general block to be lifted in certain special cases, while still preserving a meaningful value of "success" or "failure" for an action. If it was possible to create a check rule similar to this: Check joining it to when the current action involves something that is not a rod (this is the most joins don't work rule): say "This doesn't seem terribly productive." rule fails. then the procedural rule wouldn't be missed, but the above will not compile in 6G60 because the "involves" phrasing wants a specific object instead of a description of objects.] Understand the command "attach" as something new. [by default this is a synonym of "tie" in 6G60] Joining it to is an action applying to one carried thing and one thing. Understand "join [something] with/to [something]" as joining it to. Understand the commands "connect" or "attach" as "join". A procedural rule: if the current action is joining a rod to a rod, ignore the block joining rule. Check joining it to (this is the block joining rule): say "This doesn't seem terribly productive."; rule fails. Report joining it to (this is the default report joining rule): say "[The noun] is now joined to [the second noun], in a purely metaphorical and non-functional way." [To prevent mysterious non-responses if there is a hole in the after rule logic.] Section - Laughing (LaughSub) Laughing is an action applying to nothing. Understand "laugh" or "chuckle" as laughing. Report laughing (this is the default report laughing rule): create an expectant pause for the narrator's challenge about comedy; say "Was it that funny?" The narrator's challenge about comedy is a binary reply. The positive rejoinder of the narrator's challenge about comedy is "I guess it was." The negative rejoinder of the narrator's challenge about comedy is "Sure it was! You did laugh, after all." Section - Learning (LearnSub) [OK, settle in for a long explanation about why this section is so complicated... 1) For reasons of aesthetics, the author preferred to create spells as a new object-based class (like a room or direction), instead of a thing-based class (as is typical) -- the inspiration being that knowledge is not made of things, but ideas. 2) It was discovered relatively late in development that Spiritwrak 3/960606 supports commands for learning more than one spell with a single command, e.g. ">LEARN XYZZY AND PLUGH". 3) Attempting to revise the understand lines for the learning action worked here (see WWI 16.4 for details on this sort of thing) resulted in the discovery that it is not well-supported to create an understand line that allows *multiple* nouns for a kind which is not a thing, room, or direction. A statement like: Understand "learn [any known spell]" as learning. works fine, but: Understand "learn [any known spells]" as learning. does not function any differently, i.e. it still allows only a single spell when evaluating the grammar line, which may be a bug but at any rate meant there was no simple way to set up what was desired. 4) For reasons of stubbornness and/or foolishness, the author decided to try to make the status quo work, anyway, instead of switching spells to a thing-based class like a sane person would. WWI 25.22 "Inform 6 Understand Tokens" cryptically hints that it is possible to put together your own grammar tokens, so the author quickly rationalized that this was the way to go, since, if nothing else, it offered a chance to learn about and demonstrate a more substantial use of embedded I6 code. DM4 Chapters 30-32 describe the I6 machinery of understanding grammar tokens well enough to illustrate that this sort of thing is easy to do in I6, via a scope= token. Just define to select the desired objects, with some nuances about responding to different stages of scope processing as explained on p. 234, and you're done! Not too difficult if you've ever tried pure I6 programming and know how to write a function. However, it doesn't seem possible to define a scope= token, as in: The Understand token myscoperoutine translates into I6 as "scope=MY_SCOPE_ROUTINE". It seems that, at least in 6G60 as documented in WWI, you are limited to plain tokens, which, as DM4 p. 226 points out, are "the most flexible" type. Conveniently, it is simple to get a token to emulate a scope= token via I6's built-in ParseToken() function (see DM4 p.227-228). At that point it seemed relatively straightforward to accomplish what I wanted. NOTE: If you're still reading this far, STOP and think about what you are doing. You are strongly advised to just switch to a thing-based class if you run into a similar issue! It's the right thing to do! To continue with the "learning opportunity": This was not relatively straightforward, mainly because use of ParseToken() seems to take away some of the control available with respect to returning different GPR_* messages. Specifically, it did not seem possible to halt the parsing attempt mid-stream by returning GPR_FAIL at a point where various parser working variable states (notably the global variable wn) are preserved. Whether completed or failed, wn was always set to the position of the first word where the attempt to apply the token was applied, which should be the first spell name. (The author freely admits that he could be entirely wrong about any or all of the preceding.) As a result, although (after some tinkering) it was possible to learn multiple spells with one command, a "bad" spell name (either incorrect or premature because the PC had not encountered it in the game) would not always be reported correctly by the "maybe that is a spell and maybe it isn't" rule (see "Casting" under "New Actions"). Some thinking hit on a relatively simple solution: Define a new I6 global to store the state of wn on the way out of ADD_LEARNABLE_SPELLS when reporting a GPR_FAIL, like so (within an Include of I6 code): Global multi_spell_token_fail_wn = 0; [ADD_LEARNABLE_SPELLS result; multi_spell_token_fail_wn = 0; ! clear any previous value result = ParseToken(SCOPE_TT, RETRIEVE_LEARNABLE_SPELLS); ... if (result == GPR_FAIL) multi_spell_token_fail_wn = wn; ... return result; ]; and reference that global's value in the "maybe that is..." rule. This turned out to be unworkable because of the position of the I6 code generated by: To decide which number is the multi-spell token failure word position: (- (multi_spell_token_fail_wn) -) which 6G60 seems to strongly prefer placing much earlier than any I6 code incorporated via "Include (- ... -)" (even when the global declaration was placed at the start of the source code). As a result, the I6 compilation stage would fail with a complaint about using an undefined variable name. At this point, desperation was setting in, so it became necessary to look at the I6 version of the story file. Long story short, analysis of various parser functions brought the undocumented global saved_oops to light, and it proved instrumental in getting a working version of the spell name masking rule based on observations of its behavior. This is crude, kludgey, and unsafe, and it is not recommended. A better workaround, in hindsight would be to define a phrase to decide the number based on a function which doesn't use the intended value-passing global's name, as in: To decide which number is the multi-spell token failure word position: (- (ReturnStoredFailPoint();) -) and in the code here define that function, along with the global, as with (inside an Include of I6 code): Global multi_spell_token_fail_wn = 0; [ ReturnStoredFailPoint; return multi_spell_token_fail_wn; ]; Even better than any workaround might have been to have kept reading to WWI 25.25, which offers some guidance about how to get an Include request placed in a specific part of the generated I6 output. And that's that. Don't say you weren't warned.] [IMPDO - expand token syntax to allow ">learn fiznav twice and wigro three times and throck 4 times"] Learning is an action applying to one object. [Understand "learn [any known spell]" as learning.] The understand token multi-learnable-spells translates into I6 as "ADD_LEARNABLE_SPELLS". [Creates type of token, *not* scope= type. See DM4 Chapter 31 "Tokens of Grammar" for more details.] The spell kind translates into I6 as "spell_class". Definition: a spell is multi-known if it is known. [needed to avoid compiler confusion over shared name "known", otherwise chooses to apply the property name of adjective function name] Include (- [LearnableSpellCheck s; ! print "checking ", (name) s, "..."; if ((s ofclass spell_class) && ((+ multi-known +)(s))) ! translates to "...&& ((s)))" { ! print (name) s, " KNOWN..."; return true; } else { ! print (name) s, " unknown..."; return false; } ]; ! uses built-in I6 ParseToken() function to mimic operation of a scope= type of token, see DM4 p. 227 [ADD_LEARNABLE_SPELLS result; result = ParseToken(SCOPE_TT, RETRIEVE_LEARNABLE_SPELLS); ! print "(ParseToken() returned ", result, ")"; ! if (result == GPR_FAIL) ! print "(token returned GPR_FAIL from ALS, wn = ", wn, ", oops_from = ", oops_from, ", saved_oops = ", saved_oops, ")"; ! if (result == GPR_PREPOSITION) ! print "(token returned GPR_PREPOSITION result from ALS so all words ignored, wn = ", wn, ", oops_from = ", oops_from, ", saved_oops = ", saved_oops, ")"; ! if (result == GPR_NUMBER) ! print "(token returned GPR_NUMBER result from ALS, wn = ", wn, ", oops_from = ", oops_from, ", saved_oops = ", saved_oops, ", parsed_number = ", parsed_number, ")"; ! if (result == GPR_MULTIPLE) ! print "(token returned GPR_MULTIPLE result from ALS, wn = ", wn, ", oops_from = ", oops_from, ", saved_oops = ", saved_oops, ", matching ", multiple_object-->0, " objects)"; ! if (result == GPR_REPARSE) ! print "(token returned GPR_REPARSE from ALS, wn = ", wn, ", oops_from = ", oops_from, ", saved_oops = ", saved_oops, ")"; return result; ]; ! scope routine used by ParseToken() to call in ADD_LEARNABLE_SPELLS(), see DM4 p. 234 ! in scope_stage 1, returns true to signal it is multiple-noun-capable ! in scope_stage2, adds all learnable spells to scope and returns true to indicate that only added items count in global scope [ RETRIEVE_LEARNABLE_SPELLS s x err; switch (scope_stage) { 1: ! print "(scope stage 1)"; return true; 2: ! print "(scope stage 2)"; objectloop (s ofclass spell_class) { ! print "^loop sees ", (name) s, "..."; if (LearnableSpellCheck(s)) { x++; PlaceInScope(s); } } if (x > 0) ! at least one spell added to scope, so only these objects in scope for command { ! print "(RLS added ", x, " spells to scope, signaling this set should serve as restricted definition of scope for command)"; return true; } else ! no spells added to scope, revert to normal scope rules { ! print "(RLS added ", x, " spells to scope, signaling scope should revert to normal scope for command)"; return false; } 3: "BUG: Something has gone awry while parsing an ADD_LEARNABLE_SPELLS token."; } ]; -) [IMPDO - rewrite the above mess and figure out how to get the following placed correctly in the generated I6 source... To decide which number is multi-spell token failure position: (- (multi_spell_token_failed_wn) -). [this phrase is used in the "maybe that is a spell and maybe it isn't" rule, placed here to avoid issue with trying to use the variable before it is defined] ] Understand "learn [multi-learnable-spells]" as learning. Understand the commands "prepare" or "memorize" or "memorise" as "learn". [NOTE: for above, I want something equivalent to a scope= token. must return true when library variable scope_stage == 1, to signal allowance of multiple objects, and when scope_stage == 2 it must execute a series of PlaceInScope() calls for each qualifying spell then return true (to indicate that normal scope should be excluded). Failing that, I can try a token, that returns GPR_MULTIPLE after populating library array multiple_object->1...N with nouns and multiple_object->0 with the value of N. May be able to use the built-in ParseToken() function to simplify this somewhat, via ParseToken(SCOPE_TT, ) where Test is a routine that defines scope like a scope= token?] Check learning when spellcasting-blocked is true (this is the can't learn spells when spell block engaged rule): abide by the chants don't work when spellcasting is blocked rule. [See "Casting / Casting It At" section.] Check learning a permanently-learned spell (this is the don't need to learn permanently-learned spells rule): say "You always know that chant." instead. Check learning a temporarily-learned spell when the player cannot touch the prayer book (this is the can't learn chants without prayer book rule): say "Your training is such that you can only prepare such a chant with the aid of a prayer book containing it." instead. Check learning a temporarily-learned spell when the prayer book does not record the noun and the noun is simple (this is the can't learn non-perm spells that aren't in your prayer book rule): say "You can only learn chants once they are copied to your prayer book. It's a good thing you worked so hard to memorize the gnusto chant." instead. Check learning a temporarily-learned spell when the prayer book does not record the noun and the noun is complex (this is the can't learn complex spells rule): say "A chant of such complexity cannot be memorized; it must be cast when the scroll that bears it can be easily read." instead. Carry out learning (this is the default carry out learning rule): add the noun to memory. [See "Short-Term Retention" section for details on phrase.] Report learning (this is the default report learning rule): say "Making a quick prayer to the Gods, you prepare the [noun] chant[if the memorization count of the noun is 2] once again[else if the memorization count of the noun is 3] a third time[else if the memorization count of the noun is greater than 3] yet another time[else][end if]." [Note that, in the original source code, the lost spell is always the "youngest" in memory (counterintuitively meaning the "child" added the longest time ago, see DM4 p. 52). Since the I7 paradigm does not encourage thinking of the underlying object tree or manipulating it directly, no equivalent functionality exists to the (apparently undocumented) 'youngest()' function used. This implementation instead picks a random previously-learned spell to lose, which offers a less rigorous if perhaps more natural model of how forgetting works. If it is very important to emulate the original behavior precisely, some difficulty will likely be encountered because of the new relation-based link between the memory and the various spells. Notably, in release 3/960606, the limitation on learned spells appears to be non-functional, rendering the booming voice purely advisory. The reason for this is not clear.] To decide which number is the number of spells in memory: let total spells be zero; let temporary spells be the list of memorized temporarily-learned spells; repeat with tallied spell running through temporary spells: increase total spells by the memorization count of tallied spell; decide on total spells. After learning (this is the learning too many spells results in forgetting some rule): let current spell count be the number of spells in memory; if current spell count is greater than the maximum spell count of the short-term retention: let lost spell be a random memorized temporarily-learned spell that is not the noun; if lost spell is nothing: [in case PC only knows one memorized spell] now lost spell is the noun; remove lost spell from memory; consider the default report learning rule; [show normal learning message first] say "[line break]A voice booms out: 'Do not try to exceed your powers, mortal!' [first time]Oops, Brother Joseph warned you about that. [only]You seem to have forgotten [if the lost spell is remembered by the short-term retention]an instance of [end if]the [lost spell] chant."; otherwise: continue the action. Before learning when in darkness and the prayer book is at hand and spellcasting-blocked is false (this is the explain ability to memorize spells even in darkness rule): say "(The faint glow of the inscribed chants in your prayer book makes them readable even in darkness.)[line break]". Section - Lifting (LiftSub) [This verb definition was in the original source code but was commented out. Since adding a new action is probably best avoided unless there is a good reason, this seems wise. However, the synonyms are mapped to the pulling action because the series of intended responses indicate it would have similar function; this is akin to the mapping of "move" to the pushing action. See the section for "Pulling" for the syntax declaration. The relevant parts of the original commented out code were: ! Verb "lift" "raise" ! * noun -> Lift; ! [ LiftSub ; ! if (noun has static) ! "That's fixed in place."; ! if (noun has scenery) ! "You're unable to."; ! if (noun has animate) ! "That would be less than courteous."; ! print "You lift "; DefArt(noun); " and put it back in \ ! it's original position. Nothing obvious happens."; ! ]; ] Section - Meditating (MeditateSub) Meditating is an action applying to nothing. Understand "meditate" as meditating. Report meditating (this is the default report meditating rule): say "You close your eyes and focus your mind inwards. Mere moments of time seem to pass like eons. You open your eyes." [IMPDO - Using meditation room is good basis for built-in hints (invisi-clue style)?] Section - Mixing (MixSub) Mixing is an action applying to one thing. Understand "mix [something]" as mixing. Understand the command "stir" as "mix". Report mixing (this is the default report mixing rule): indicate a nonsensical action. Section - Rolling Up Rolling up is an action applying to one thing. Understand "roll [something]" or "roll up [something]" or "roll [something] up" as rolling up. Report rolling up (this is the default report rolling up rule): if the noun is a person: say "Not hardly."; otherwise if the noun is papery: say "There doesn't seem to be much point to rolling up [the noun]."; otherwise: say "[The noun] doesn't seem to be something that can be rolled up." Section - Sailing Sailing is an action applying to one visible thing. Understand "sail [direction]" or "sail [thing]" as sailing. Check sailing a direction when the player is not enclosed by the small sailboat (this is the can't sail unless you're in a sailing vessel rule): say "You would need to be in a boat to do that." instead. Check sailing a thing (this is the can't sail most things rule): say "[The noun] do[if the noun is singular-named]es[end if]n't look seaworthy to you." instead. Check sailing the player (this is the can't sail yourself rule): say "Don't be ludicrous." instead. Carry out sailing: try going the noun instead. Section - Scattering Scattering is an action applying to one thing. Understand "scatter [something]" as scattering. Understand the commands "sprinkle" or "spread" as "scatter". Understand "scatter [something] onto/on/over [something]" as putting it on. Check scattering when the noun is not enclosed by the player (this is the can't scatter what you don't have rule): say "You would have to be holding [the noun] to do that."; rule fails. Definition: A thing is scatterable if it is the sand. Check scattering when the noun is not scatterable (this is the can only scatter some things rule): say "You can't scatter something like [the noun]."; rule fails. Carry out scattering (this is the carry out scattering rule): silently try dropping the noun. Report scattering (this is the default report scattering rule): if the noun is not enclosed by the player: say "You scatter [the noun] about you."; otherwise: say "You can't seem to get [the noun] out of [the holder of the noun]." Section - Shaking (ShakeSub) [Note that the original source code defines 'yank' as a synonym for 'shake', even though it might more naturally be considered a synonym for 'pull'. The most likely point in the game where this would matter is when trying to shake the corbie egg from its nest, when arguably "pulling" the branch would normally imply a steady pull trying to bend it so the nest gets close enough to reach. This implementation leaves the synonym as it is in the original.] Shaking is an action applying to one touchable thing. Understand "shake [something preferably held]" as shaking. Understand the commands "yank" or "jerk" or "wiggle" or "jiggle" or "wobble" or "wag" or "bounce" as "shake". Check shaking a person (this is the can't shake other people rule): say "Get ahold of yourself. No need to go around shaking living things like that." instead. Report shaking something (this is the default report shaking rule): say "Nothing happens." Section - Sneezing (SneezeSub) Sneezing is an action applying to nothing. Understand "sneeze" or "cough" or "clear throat" or "clear my throat" or "ahem" or "achoo" as sneezing. Report sneezing (this is the default report sneezing rule): say "You make a rather sickly noise." Section - Special Dialing (SpecialDialSub) [The code below is commented out in the original SPIRIT.INF source file. It looks like the aftermath of a failed experiment in trying to allow setting dials with numeric ranges to a number directly. This was the inspiration for the "Numeric-Dial" kind and its associated rules, including the modifications to the "Setting It To" action. See those sections for details; the code below is included only for purposes of reference and comparison.] [KEEP - original source code !Extend "turn" first ! * noun "to" number -> SpecialDial; ] [KEEP - original source code ![ SpecialDialSub; ! if (noun hasnt numberdial) ! "You can't seem to do that."; ! if ((second > 9) || (second < 0)) ! print "It appears that the valid range for ",noun; " is 0 to 9"; ! noun.number = second; ! if (noun.number > 9) noun.number = 0; ! a special restriction in this case ! print "You set ",noun," to ",second; "."; !]; ] Section - Talking To Talking to is an action out of world applying to one thing. Understand "talk to [someone]" or "talk [someone]" as talking to. Check talking to something (this is the explain NPC interaction model for this game rule): say "[italic type]Note: This is an 'old school'-style game, and thus it uses the ask/tell/answer model for interaction with other characters. Instead of a command like '[roman type]>TALK TO DORNBEAST TRAINER[italic type]' for general communication, you must choose to ask or tell about a specific subject, as with '[roman type]>ASK TRAINER ABOUT TRAINING[italic type]' or '[roman type]>TELL TRAINER ABOUT ESCAPED DORNBEAST[italic type]' or '[roman type]>SAY DOWN BOY TO ESCAPED DORNBEAST[italic type]'[roman type]."; rule fails. Section - Toggling Toggling is an action applying to one thing. Understand "toggle [something]" as toggling. Understand the command "flip" as "toggle". Instead of toggling a device (called switchee) (this is the toggling a device switches its state rule): if the switchee is switched on: try switching off the switchee instead; otherwise: try switching on the switchee instead. Check toggling something that is not a device (this is the only devices can be toggled rule): say "You can't see any kind of switch on [the noun] to toggle." instead. Report toggling (this is the generic report toggling rule): say "You toggle [the noun], to no effect." Section - Unrolling Unrolling is an action applying to one thing. Understand "unroll [something]" as unrolling. Report unrolling (this is the default report unrolling rule): if the noun is a person: say "Not hardly."; otherwise if the noun is papery: say "[The noun] is not rolled up right now."; otherwise: say "[The noun] doesn't seem to be something that can be unrolled." Section - Waving It At [Really this is not intended to be a full-fledged action so much as a way of accepting new syntaxes for the command "wave". This two-nouned version uses a before rule to reroute the command to simply waving (a one-noun action) the noun.] Waving it at is an action applying to two things. Understand "wave [something] at [someone]" as waving it at. Before waving something at something (this is the ignore second noun when waving something at something rule): try waving the noun instead. Section - Waving To [Really this is not intended to be a full-fledged action so much as a way of accepting new syntaxes for the command "wave". This one-nouned version uses a before rule to reroute the command to simply waving hands (a zero-noun action).] Waving to is an action applying to one thing. Understand "wave to [someone]" or "wave at [someone]" as waving to. Before waving to something (this is the ignore noun when waving to something rule): try waving hands instead. Section - Yawning (YawnSub) [Note that the original source code's YawnSub routine had a special behavior when Frobar was in the location. The equivalent logic has been moved to the chapter on Frobar in this implementation.] Yawning is an action applying to nothing. Understand "yawn" as yawning. Report yawning (this is the default report yawning rule): create an expectant pause for the narrator's challenge about exhaustion; say "Tired?" The narrator's challenge about exhaustion is a binary reply. The positive rejoinder of the narrator's challenge about exhaustion is "There is such a thing as saving a game, you know." The negative rejoinder of the narrator's challenge about exhaustion is "All right then, carry on." Section - Yelling (YellSub) Understand the command "shout" as something new. Yelling is an action applying to nothing. Understand "yell" or "yodel" as yelling. Understand the commands "scream" or "bellow" or "shout" as "yell". Report yelling (this is the default report yelling rule): say "ARRGH!" Section - Yelling Specifically Yelling specifically is an action applying to one topic. Understand "yell [text]" as yelling specifically. Understand "yell [text] at [someone]" as answering it that (with nouns reversed). [This doesn't work as intended because its grammar line was compiled ahead of the one for yelling specifically, and this one is grabbing any command that would match the yell specifically format.] Rule for supplying a missing second noun while yelling specifically (this is the try to trick the parser a bit rule): say "(converting to yelling)"; convert to the yelling action on nothing; rule succeeds. Check yelling specifically (this is the convert yelling specifically to plain yelling rule): try yelling instead. Section - Xyzzying, aka Shouting Out to the Original 'Adventure' (XyzzySub) Shouting out to the original Adventure is an action applying to nothing. Understand "xyzzy" or "plugh" or "treasure" or "plover" or "yoho" as shouting out to the original Adventure. Report shouting out to the original Adventure (this is the default xyzzy rule): say "A hollow voice says, 'Cool!'". Chapter - New Kinds of Actions Section - Manual Manipulation [There are several places in the game where there is a check to see if the PC's action requires the ability to physically touch a thing. Although there is a built-in definition about actions "requiring a touchable noun", handling of them is inconsistent with respect to whether they have built-in "block X" rules, and in which rulebook (check, report) those rules are located. Also, some of the actions defined as requiring touchable nouns or second nouns do so because the thing in question must be within the PC's reach, not necessarily because the PC must touch that thing in the course of executing the action, e.g. ">PUT EGG IN FRYING PAN" requires a touchable second noun because the pan must be in reach, but it's not necessary to actually touch the hot pan to do this, or ">ENTER GATE" means it must be possible to walk through it, but it's not necessary to touch any part of the gate's structure. This section assigns actions that "really" require touching the noun (with the PC's implied hands) to a kind of behavior called "manual manipulation".] Folding something is manual manipulation. [new action] Kissing something is manual manipulation. Pulling something is manual manipulation. Pushing something is manual manipulation. Rolling up something is manual manipulation. [new action] Rubbing something is manual manipulation. Shaking something is manual manipulation. [new action] Taking something is manual manipulation. Touching something is manual manipulation. Turning something is manual manipulation. Searching something is manual manipulation. Squeezing something is manual manipulation. Switching on something is manual manipulation. Switching off something is manual manipulation. Unrolling something is manual manipulation. [new action] Waving something is manual manipulation. Consulting something about something is manual manipulation. [arguable, assumes book-like thing with pages to turn] Joining something to something is manual manipulation. [new action] Setting something to something is manual manipulation. Chapter - Modified Standard Actions Section - Answering It That [These modifications are to allow a special interaction on in Snowy Outcropping, where the PC's voice can set off an avalanche.] Understand "answer [text] to [something]" as answering it that (with nouns reversed). Understand the commands "respond" or "reply" as "answer". The block answering rule is not listed in any rulebook. Report answering it that (this is the default report answering it that rule): consider the block answering rule. Section - Asking It About (and Querying It About) [In I6 works, it is common to follow the example given in DM4 pp.233-234 to allow the player to ask an NPC about an object by adjusting the grammar lines for the I6 Ask action and using various scope-changing routines (called by either the grammar line or the action logic) to place legitimate objects of inquiry into scope. In I7, directly modifying scope via logic is not encouraged -- instead the ability to construct an "[any thing]" token for a verb's understand line gives authors the chance to define scope using defined adjectives or properties prior to the execution of any action-processing rules. Here's the rub, however: at the point where the parser is trying to match understand lines, things like the noun and the second noun are not yet defined, so the effect being tried for here (i.e. limiting NPC knowledge to specific non-local things) is not that straightforward. It would seem that a possible workaround would exist, namely limiting the second noun token to a normal "[something]" and then using an "after deciding the scope..." (by which point the noun will have been defined) to bring things known by the noun into scope. However, this approach caused a very strange bug in which rule processing would switch to the rules for a person brought into scope instead of the original noun -- so that, for example, asking the receptionist about the governor when the receptionist recognizes the governor would somehow cause the governor's rulebooks to intercede for the asking it about action. The kludgey solution used in this implementation is to: a) define a "querying it about" action that applies to two things, b) define an understand line for the querying it about action that allows things instead of topics, using "ask X about Y" syntax so the player won't see the difference between actions selected by the parser, c) creating a definition-based adjective "query-recognizable" that will apply to anything recognized by a person who is in the location, d) make the second noun token an "[any query-recognizable thing]" token to bring all such things into scope, e) using a first-placed instead rule to convert querying someone about unrecognized things that aren't in the location into asking about an untypeable topic (to guard against over-inclusion of things into scope due to presence of other NPCs present who recognize the second noun), f) using a last-placed instead rule to convert querying someone about all things into asking about an untypeable topic (to provoke the regular asking it about response for being asked about a non-handled thing), and g) creating another understand line with second noun token "[something]" for the querying it about action, to allow querying someone about things normally in scope. Short version: If you want person X to always respond to being asked about thing Y no matter where Y is, create a rule "instead of querying X about Y..." and declare "X recognizes Y". If you want person X to respond to being asked about thing Y only if thing Y is immediately visible, write the instead or querying it about rule but skip the declaration about recognition. This approach has the advantage of allowing the player to type any suitable noun phrase when asking an NPC about something, and also of hooking into the "generic life rules" when suitable (see "Life property"). The drawback is that, if multiple NPCs are present, any thing recognized by any NPC will be brought into scope before the noun is defined, which may not be desirable in all cases but has not turned out to be a problem yet for this implementation. Also a drawback is the need to handle querying it about responses purely via instead rules, but that doesn't make the situation here any worse than it already was because the generic life rules impose a similar constraint. It might seem a lot easier to just use an "[any thing]" token for the second noun in the querying it about understand lines. However, this approach has the giant drawback in that disambiguation requests will be triggered by the parser's early processing of the player's command, thus showing things that the PC theoretically doesn't know about yet. (Example: ">ask Brother Joseph about windcat") This approach is somewhat based on the example seen in Ex 286 "Nameless" as found in WWI 16.5. Technically, querying it about should be considered a new action, but since it uses the same syntax from a player perspective and is really intended to make up for the bug referenced above, this logic is listed under "Modified Standard Actions". See the "Recognition" relation for the declaration of the relation on which the "include recognized things when asking about rule" depends.] Definition: A thing is query-recognizable if it is recognized by a person in the location. Querying it about is an action applying to one visible thing and one visible thing. Understand "ask [someone] about [any query-recognizable thing]" or "ask [someone] about [something]" as querying it about. [Note that the following rule is called many more times than would be expected in a typical turn, sometimes resulting in a noticeable, if short, pause when it is activated.] After deciding the scope of the player while querying someone about something (this is the include recognized things when querying about rule): [ say "*[run paragraph on]";] repeat with familiar item running through things recognized by the noun: place familiar item in scope. Definition: A person is extraneous if it is not the player and it is not the noun. This is the reroute querying it about to unanswerable question rule: try asking the noun about "a,z" instead. First instead of querying someone about something when at least one extraneous person is in the location and the noun does not recognize the second noun and the second noun is non-local (this is the convert querying someone about unrecognized non-local things to asking about untypeable topic rule): [ say "(early reroute: extraneous count = [number of extraneous people in the location], noun = [noun], second noun = [second noun], second noun location = [location of second noun], location = [location] / [if the noun recognizes the second noun]RECOGNIZED[else]not recognized[end if], [if the noun can see the second noun]SEEN[else]not seen[end if], [if the second noun is non-local]NON-LOCAL[else]local[end if])";] abide by the reroute querying it about to unanswerable question rule. Last instead of querying someone about something (this is the convert unhandled querying it about actions to asking about untypeable topic rule): [ say "(late reroute: extraneous count = [number of extraneous people in the location], noun = [noun], second noun = [second noun], second noun location = [location of second noun], location = [location] / [if the noun recognizes the second noun]RECOGNIZED[else]not recognized[end if], [if the noun can see the second noun]SEEN[else]not seen[end if], [if the second noun is non-local]NON-LOCAL[else]local[end if])";] abide by the reroute querying it about to unanswerable question rule. Section - Attacking [These modifications are just to make it easier to write rules in my preferred style of using an I7 "after" rule for any action that seems to succeed -- notably the implementation of one of the original version's interactions with the corbie egg. Most interactions using this verb should produce the same messages; players will not normally be aware that the "blocked" behavior now registers internally as a success rather than a failure.] The block attacking rule is not listed in any rulebook. Report attacking (this is the default attacking rule): consider the block attacking rule. Understand the command "kick" or "slap" or "smack" or "hammer" or "pound" or "slam" as "attack". Section - Blowing [Despite the invitation to innuendo, this was a standard verb in I6, though it seems to not be included in the 6G60 Standard Rules. It's needed for the whistle, so it is recreated in a minimal fashion here. Brief experimentation with release 3/960606 shows no significant difference from the I6 default, though note that this implementation uses a style of default action success instead of failure, so the standard report message is changed from the I6 default.] Blowing is an action applying to one carried thing. Understand "blow [something preferably held]" or "blow on [something preferably held]" as blowing. Understand the command "play" as "blow". Report blowing (this is the default report blowing rule): say "Blowing on [demonstrative object pronoun of the noun] accomplishes nothing useful." Section - Cutting Understand the commands "clip" and "trim" as "cut". The block cutting rule is not listed in the check cutting rulebook. [Since this seems to intercept at the point of player intent as opposed to the point of action, it really should be an instead rule.] Instead of an actor cutting something not cuttable (this is the replacement block cutting rule): say "Cutting [demonstrative object pronoun of the noun] up would achieve little." Report cutting: say "Your attempt to cut [the noun] has no obvious effect." Section - Dropping [This rule is to prevent the default response about not having something when the player tries to drop an item that is in inventory but not carried. It may seem unusual that the check rule restarts the dropping action after a successful silent take attempt, but this is necessary to trigger a rerun of the before, instead, and check rules applicable to the dropping action. If the final command were "continue the action" instead of "try dropping...", the player can bypass some rules designed to stop the dropping action, as in the ball of tape example found in the debugging sections at the end of this source code.] Check dropping something when the noun is born by the player and the noun is not carried by the player and the noun is not worn by the player (this is the dropping things that are in inventory but not carried or worn rule): say "(first taking [the noun] from [the holder of the noun])[command clarification break]"; silently try taking the noun; if the player carries the noun: try dropping the noun instead. The dropping things that are in inventory but not carried or worn rule is listed before the can't drop what's not held rule in the check dropping rules. Section - Entering [Inform 6 supports the one-word command "enter" with the I6 GoIn action, which causes the player to try going inside. This is a way of doing the same, by supplying a missing noun and then converting to a going action using a before rule. (An instead rule does not work because of interference from the "basic accessibility" Standard Rule, which objects to an attempt to enter something (in this case, a direction) which can't be touched.] Understand the command "board" as "enter". Rule for supplying a missing noun while entering (this is the supplement unadorned enter with the direction inside rule): now the noun is inside. Before entering inside (this is the treat attempts to enter inside as going inside rule): try going inside instead. Section - Examining [Note that the original source code specified a grammar line for the I6 Examine action (see below) that would add items for which a routine ReadableSpell() returned true. Since no direct equivalent to ReadableSpell() is implemented here, there is no need to make any modifications to the examine action. This comment is purely for reference. To see how similar results are achieved here, see the section "Spell (as a kind)". Extend "examine" first * scope=ReadableSpell -> Examine; ! NOTE: This routine has a slight bug (as cribbed from GN's ! Balances, rel2) in that Examine, if the routine reaches ! scope_stage 3, prints a rather confusing msg. However, ! the appropriate msg is printed for, say, Learn, if the ! spell is unknown/out-of-scope. Oddly, action can't ! be checked at stage 3, so I copied a second version of ! the routine for Examine only. -DY ! 3/19 update: Checking Graham's release 3 of Balances, ! I stumble across the "action_to_be" var. Most useful. [ ReadableSpell i j k; if (scope_stage==1) return 1; if (scope_stage==2) { objectloop (i in player) if (i has is_spell_book) { for (k=0:kk~=0:k++) { j=(i.magic)-->k; PlaceInScope(j); } } rtrue; } if (action_to_be == ##Examine) "You can't see any such thing."; !"You have never seen or heard of such a chant."; "You can't see such a chant, if that is indeed a chant."; ]; ] Section - Exiting Check exiting when the the holder of the player is the location (this is the convert exiting to going outside when not in a container or on a supporter rule): try going outside instead. Section - Giving It To Understand "give [something] over to [someone]" or "give over [something] to [someone]" as giving it to. Section - Going Understand the command "crawl" as "go". Understand "go to [text]" as a mistake ("[italic type]Note: This game, for the most part, tries to emulate the old-school Infocom feel. A feature like that would be [bold type]far[italic type] too convenient to fit the style.[paragraph break]You'll have to go room by room, but you can issue multiple commands in one line by separating them with periods, as in: '[roman type]>CURSE IMPLEMENTOR. E. N. N. U. I. USE PENCIL ON MAP.[italic type]'.[roman type]"). Section - Inserting It Into (InsertSub) [The original source code redefined the I6 Insert action to allow a check of the relevant size of the thing being inserted and the container into which it was being inserted. In the I7 paradigm, this is precisely the intent of check rules, so this implementation just adds a few of those in lieu of redefining the action itself. This is a very simplistic handling of the concept of sizes and does not do anything to stop relatively nonsensical situations like putting 5 things of size 9 into a size 10 container, but that is how it works in release 3/960606. A more thorough treatment does not seem warranted at this time, but it might be interesting to implement something later. Ex. 257 "Depth" is a good guide to doing this semi-realistically, but even a slightly more nuanced system of using carrying capacity as the maximum sum of the sizes of contained things might be close enough. This would involve relatively simple modifications of the "can't insert if this exceeds carrying capacity" and "can't put if this exceeds carrying capacity" rules in the I7 Standard Rules. [IMPDO] Note that the first check of the modified InsertSub routine was to see if the targeted container was the I6 d_obj (equivalent to the "down" direction in I7), in which case the action was converted to a drop action on the noun. The only sensible reason for this is to handle commands such as ">put prayer book down", but this case is already handled during parsing by the I7 6G60 Standard Rules' understand lines for "put," so no equivalent adaptation is necessary. Also note that the original source code's modified version of InsertSub had to replicate the equivalent of check logic, by doing things like ensuring that the player held the thing in question, the container was open, etc. and returning appropriate library messages (using the I6 'L__M()' function) as appropriate. It also had to convert the action to an I6 Receive action and test the target container's I6 'before()' routines to see if they responded. None of that needs to be replicated here because the Standard Rules will continue to handle those cases. Additionally, note that the original source code's modified version of InsertSub set the I6 library variable 'receive_action' to the I6 'Insert' action early on. This was because the I6 paradigm treated inserting it into and putting it on as the same underlying action, with the action logic influenced by the presence of 'container' or 'supporter' attributes on the receiving object. In the I7 paradigm these are different actions with different governing relations (containment and support), so it is not necessary to attend to this detail. Finally, of passing interest is the fact that the replacement InsertSub routine used an apparently-undocumented I6 function 'ValueOrRun()' to check whether the destination container was at its carrying capacity.] Understand the command "install" as "put". Check inserting something into something when the noun is in the second noun (this is the no need to put things into the same container they're already in rule): say "[The noun] is already in [the second noun]." instead. The no need to put things into the same container they're already in rule is listed before the can't insert what's not held rule in the check inserting it into rules. Check inserting something into a closed container (this is the flavor can't insert into closed containers rule): say "Alas, [subject pronoun of the second noun] is closed." instead. [response in original "Spiritwrak", perhaps this was default response in Inform 5?] The flavor can't insert into closed containers rule is listed before the can't insert into closed containers rule in the check inserting it into rules. [ensure it takes precedence over Standard Rules] Check inserting something carried into a container (this is the can't fit things into containers smaller than themselves rule): if the size of noun is greater than the size of the second noun: say "[The noun] appears to be too large to put into [the second noun]." instead; otherwise: continue the action. Section - Jumping The block jumping rule is not listed in the check jumping rulebook. Report jumping (this is the default report jumping rule): say "You jump on the spot, fruitlessly." [Note that the following use of the verb "jump" was included by default in I6 and is restored here because some logic expects it.] Jumping over is an action applying to one visible thing. Understand "jump over [something]" as jumping over. Report jumping over (this is the default report jumping over rule): say "You would achieve nothing by this." Section - Listening Understand "hear" as listening. The block listening rule is not listed in the check listening to rulebook. Report listening: say "You hear nothing unexpected." Section - Looking [These are not accepted syntaxes in the original "Spiritwrak", but they are in Inform 6.31.] Understand "look to [direction]" or "look to [something]" as examining. Understand "look on [something]" as searching. Understand the command "see" as "look". Section - Preferring Abbreviated Room Descriptions [Infocom's 8-bit parsers only understood the first six letters of a word, so the author was in the habit of typing "superb" for "superbrief". This will add a small nostalgic touch for anyone with the same habit.] Understand "superb" as preferring abbreviated room descriptions. Section - Pulling Understand the commands "lift" or "raise" as "pull". Section - Pushing Understand "push [something] aside" as pushing. Understand the command "bump" as "push". Section - Pushing It To [The Inform 6 world model has a "floor" object available in all locations (along with a "ceiling" object), and "move X to floor" triggers an I6 Drop action on X. The floor object is (appropriately) left out of I7 6G60, and it seems more complicated than it would be worth to instantiate one properly here (i.e. creating floorless/floored and ceilingless/ceilinged properties, indoor room and outdoor room kinds, combing through the 230+ rooms to reassign all regular rooms to those kinds, and making appropriate adjustments to other room kinds or individual rooms. A cheat along the lines of: Understand "move [something] to floor/ground" as dropping. was briefly considered, but it's not very palatable to allow a word like "floor" which is a noun and therefore implies a game world object, to be recognized only in the context of certain commands. A little exploration of the Standard Rules inspired this decent (and suitably lazy) compromise.] Understand "ground" or "floor" as down. Instead of pushing something to down (this is the interpret pushing something to down direction as dropping rule): try dropping the noun instead. Section - Putting It On Check putting something on something when the noun is on the second noun (this is the no need to put things onto the same supporter they're already on rule): say "[The noun] is already on [the second noun]." instead. Section - Quitting the Game Understand "die" as quitting the game. Section - Removing It From [The default behavior for the verb "remove" is a bit strange in I7 6G60's Standard Rules, and it doesn't seem very easy to get the parser to make sense of the command "remove sticker" as shorthand for "remove sticker from pan". This turned out to be a lot more difficult to modify in a sensible way than expected, as this action has deep roots into the I6 library. Although it was easy enough to modify the top level grammar for the verb "remove" as explained in WWI 16.3, there is a persistent tendency for the parser to generate implicit takes, which makes for less elegant output. At root seems to be two things: First, a one-noun command using remove more naturally fits the taking off action, and it's desirable to preserve this use of the verb. Second, the Standard Rules' definition of the taking off command specifies that "Taking off is an action applying to one carried thing." As explained in WWI 12.17, this means that any invocation of the taking off action will first generate an implicit take of a noun not directly carried. Personally, this doesn't seem quite right to me, as, in the I7 paradigm, both "worn" and "held" are states dependent on fundamentally different relations. (Though perhaps the "[something preferably held]" allows worn items to count?) Even with the grammar rebuilt to use a "[something]" token, the parser's low-level behavior seems to kick in and generate an implicit take before the built-in "can't take off what's not worn rule" can fire. A little persistence proved that I7 before rules apply early enough that they can be used to reroute actions.] [Original grammar definitions from Standard Rules: Understand "remove [something preferably held]" as taking off. Understand "remove [things inside] from [something]" as removing it from. Also: Check an actor removing something from (this is the convert remove to take rule): convert to the taking action on the noun. Also: Taking off is an action applying to one carried thing.] Understand the command "remove" as something new. Understand "remove [things inside] from [something]" as removing it from. [This line seems OK, as the parser will require that the noun be inside the second noun to decide it fits.] Understand "remove [something]" as taking off. [Avoids "preferably held" token to prevent automatic attempts to take. This should trigger the built-in "can't take off what's not worn" rule in most cases.] Before taking off when the noun is not worn by someone and the noun is inside something (this is the convert removal of non-worn contained things into removing it from action rule): try removing the noun from the holder of the noun instead. Before taking off when the noun is not worn by someone (this is the convert removal of non-worn uncontained things into taking action rule): try taking the noun instead. [Some functionality for Barsap's Gambit requires the ability to see whether a take action was generated from an intercepted removing it from action. This is achieved by defining a new activity that will be started and ended by the removing it from action -- it will be "going on" during any generated take action. See WWI Chapter 17.] Multi-removing is an activity. Check removing something from something (this is the kick off multi-removing activity when removing it from rule): [ say "(starting multi-removing activity manually)";] begin the multi-removing activity. The kick off multi-removing activity when removing it from rule is listed before the convert remove to take rule in the check removing it from rules. [ensure this rule acts before the conversion to a take action by Standard Rules] [The following would ideally be an "after removing something from something" rule, but it appears that in 6G60, the after rules for the removing it from action are not consulted, at least when only taking one object. Thus, an every turn rule is the only choice.] Every turn when the multi-removing activity is going on (this is the end multi-removing activity at the end of turn rule): [ say "(ending multi-removing activity manually)";] end the multi-removing activity. Section - Rubbing Understand the command "pet" as "rub". The block rubbing rule is not listed in the check rubbing rulebook. Report rubbing: say "You achieve nothing by this." Section - Searching Understand "search through [something]" or "search in [something]" as searching. Understand the command "rummage" as "search". The can't search unless container or supporter rule is not listed in the check searching rulebook. Report searching when the noun is not a container and the noun is not a supporter (this is the searching generally reports nothing of interest rule): say "You find nothing of interest." Section - Setting It To The block setting it to rule is not listed in any rulebook. [This next little bit of legerdemain is intended to get around the I7 standard rule that defines the setting it to action as applying to one thing and one topic. Topics are not of interest in this game unless they are numbers or oven settings. By checking that the topic is a single "word" then asking to check if the player's command includes a number, the following rule causes I7 to define the internal variable "the number understood" and can copy it as an action variable. A similar principle applies for oven settings. This approach is not very sensitive to malformed commands, but it seems to work well enough. A different approach might be to create different kinds of setting it to actions, in which case the various understand lines for each action's syntax would specify the kind of value to be used.] The setting it to action has a number called intended setting. The setting it to action has an oven setting called intended cooking mode. The setting it to action has a truth state called cooking mode detected. Setting action variables for setting something to something (this is the interpret topics as numbers when possible rule): now the intended setting is -1; [reset to differentiate from initial 0, which is valid for combination-dials] if the number of punctuated words in the topic understood is 1: if the player's command includes "[number]", now the intended setting is the number understood. Setting action variables for setting something to something (this is the interpret topics as oven settings when possible rule): now cooking mode detected is false; if the player's command includes "[oven setting]": now cooking mode detected is true; now the intended cooking mode is the oven setting understood. Report setting it to (this is the default report setting it to rule): say "Your attempt to set [the noun] in this way has no obvious effect." [Note: This registers as a successful action.] Understand "turn [dial] to [text]" or "turn [hands] to [text]" as setting it to. Understand "set [GUE-Automatic oven] to [text]" as setting it to. Section - Showing It To The block showing rule is not listed in the check showing it to rulebook. Report an actor showing something to: say "[The second noun] is unimpressed." Section - Singing [This action is unblocked (at least from the perspective of the check rulebook layer) to facilitate the function of the alarm clock. (See "Alarm Clock")] The block singing rule is not listed in any rulebook. Understand the command "hum" as "sing". Report singing (this is the default report singing rule): consider the block singing rule. [An early playtester tried to sing specific things or ways, so...] Singing specifically is an action applying to one topic. Understand "sing [text]" as singing specifically. Check an actor singing specifically (this is the treat singing specifically as just plain singing rule): try the actor singing instead. Section - Smelling The block smelling rule is not listed in the check smelling rulebook. Report smelling: say "You smell nothing unexpected." Section - Swearing Mildly [Note that I7 6G60 does not support the I6 standard behavior of reacting to a swear word followed by a topic, since the Standard Rules define the relevant action as applying to nothing. Although it would not be desirable to spend a lot of effort getting this atavistic behavior to work, it is relatively trivial.] Understand the command "curse" as "darn". Swearing mildly at is an action applying to one topic. Understand "bother [text]" as swearing mildly at. Carry out swearing mildly at (this is the demote swearing mildly at something to swearing mildly in general rule): try swearing mildly instead. Section - Swearing Obscenely (StrongSub) Understand the command "sod" as "damn". Swearing obscenely at is an action applying to one topic. Understand "damn [text]" as swearing obscenely at. Carry out swearing obscenely at (this is the demote swearing obscenely at something to swearing obscenely in general rule): try swearing obscenely instead. [Note that the original logic generated a random number from 1 to 20 and killed the PC if it was above 15. This version maintains the same probability.] This is the gods don't appreciate swearing rule: say "[first time]Such language from a priest such as yourself! [only][run paragraph on]"; if a random chance of 3 in 4 succeeds: say "The ground rumbles ominously."; otherwise: say "The ground rumbles, and a bolt of blue wrath from the Deities strikes you dead."; end the game in death. The gods don't appreciate swearing rule is listed instead of the block swearing obscenely rule in the check swearing obscenely rules. Section - Switching the Story Transcript Off Understand "noscript" or "unscript" as switching the story transcript off. Section - Taking Understand the commands "grab" or "detach" as "take". [It seems a little strange that taking "all" will cause the PC to start pulling things out of containers being carried, but this is the standard behavior in the 6G60 rules. Likewise, a separate rule prevents taking things out of portable containers, so only the container itself will be taken. Addition of a new rule for deciding whether all includes prevents this behavior, and another is put in place for supporters.] Rule for deciding whether all includes something in a portable container while taking (this is the exclude items in portable containers from take all rule): rule fails. [Note that using "decide no" instead of "rule fails" seems to render the rule inoperative.] Rule for deciding whether all includes something on a portable supporter while taking (this is the exclude items on portable supporters from take all rule): rule fails. Section - Tasting The block tasting rule is not listed in the check tasting rulebook. Report tasting: say "You taste nothing unexpected." Section - Throwing It At [These modifications are just to make it easier to write rules in my preferred style of using an I7 "after" rule for any action that seems to succeed -- notably the implementation of one of the original version's interactions with the corbie egg. Most interactions using this verb should produce the same messages; players will not normally be aware that the "blocked" behavior now registers internally as a success rather than a failure.] The futile to throw things at inanimate objects rule is not listed in any rulebook. The block throwing at rule is not listed in any rulebook. Report throwing it at (this is the default report throwing it at rule): if the second noun is inanimate: consider the futile to throw things at inanimate objects rule; otherwise: consider the block throwing at rule. Section - Touching Understand the commands "fondle" or "grope" or "poke" or "tap" as "touch". Section - Turning [A small nicety for dealing with the various dials in the game.] Understand the command "spin" as "turn". Chapter - Modified Standard Activities Section - Printing the Description of a Dark Room Rule for printing the description of a dark room: say "It is pitch black. You are likely to be eaten by a grue." Chapter - Modified Standard Kinds Section - Men Understand "man" as a man. Section - Person Understand "person" as a person. Section - Woman Understand "woman" as a woman. Chapter - Reimplemented I6 Standard Actions [This chapter includes definitions for actions that are part of the I6 standard library but are left out of the I7 Standard Rules. Note that the definition if "standard" I6 vocabulary is based on Inform 6.31, and may differ in some ways from the standard vocabulary of Inform 5.5, which is what the original 'Spiritwrak' was created with. Also note that, as the conceptual basis for Inform 7 continues to evolve, it is possible that built-in support for certain commands will be dropped. In I7 6G60 the following commands function in a manner identical to or similar to their I6 versions without modification, unless otherwise noted (commands with asterisk indicate debugging verbs not available in a "released" storygame): OUT OF WORLD ACTIONS brief/normal : changes rules for room description, shows room descriptions only on first visit to a room verbose/long : changes rules for room description, shows room descriptions on every visit superbrief/short : changes rules for room description, never shows room descriptions unless "look" command given notify on/notify : enable notification of score changes notify off : disable notification of score changes pronouns : displays list of pronouns and objects assigned to them quit/q : quit the current session save : save the current session state to an external file restore : overwrite current session with a saved session state from an external file score : report basic score and turn count information for current session transcript on/transcript : begin saving player commands and responses to an external file transcript off : stop saving player commands and responses to an external file script on/script : synonym of "transcript on" script off : synonym of "transcript off" verify : verify the integrity of the storygame program file version : print title, version, and bibliographic information about the storygame actions on*/actions* : display actions understood by player commands gonear* : change player character location to that of a specific object random* : seed the random number generator with a hardcoded value scope* : display all objects in scope for the player or an object showobj* [replaced] : display state information of an object, superseded by "showme" debugging verb in I7 showverb* : display the synonyms and grammar lines associated with player command trace on*/trace* : begin showing parser's grammar-matching activity when understanding the player's command trace off* : stop showing parser's grammar-matching activity when understanding the player's command trace <1-5>* : change the level of detail when parser tracing is on, higher = more detail abstract* : relocate an object in the game world, i.e. move an object to another part of the object tree purloin* : relocate an object in the game world to the player character's inventory tree* : display the object tree for the game world, or the portion of it attached to a particular object IN WORLD ACTIONS answer/say/shout/speak : say a topic to someone ask ... about : ask someone about a topic ask ... for : ask someone to give you something ask ... to : ask someone to do something attack/kill/hit/punch : attack something or someone break/crack/destroy/fight : synonyms of "attack" thump/punch/smash : synonyms of "attack" murder/torture/wreck : synonyms of "attack" bother/curses/darn/drat : recognized polite swearing, with topic or standalone burn/burn ... with : ignite something, directly or with an indirect object light/light ... with : synonyms of "burn/burn ... with" buy/purchase : express the wish to purchase something climb/climb up/climb over : climb something scale/scale up/scale over : synonyms of "climb" close/close up : close something cover/cover up : synonyms of "close" shut/shut up : synonyms of "close" shut off : synonym of "switch off" consult ... about : consult something about a topic consult ... on : synonym of "consult ... about" cut/chop/prune/slice : cut something (no indirect object allowed) drink/sip/swallow : drink something drop/discard/throw : drop something drop ... in/throw ... in : synonyms of "put ... into" drop ... into/throw ... into : synonyms of "put ... into" drop ... down/throw ... down : synonyms of "put ... into" discard ... in / discard ... into : synonyms of "put ... into" discard ... down : synonym of "put ... into" throw ... at / throw ... against : throw something at another thing drop ... on / drop ... onto : synonyms of "put ... onto" discard ... on / discard ... onto : synonyms of "put ... onto" throw ... on / throw ... onto : synonyms of "put ... onto" (technically also lower-priority synonyms of "throw .. at) eat : eat something enter / cross : with direct object, enter something; (verb alone usage disabled in 6G60) examine / check / describe : visually inspect something more closely watch / x : synonyms of "examine" exit : get out of something the player character is inside of; (direct object usage disabled in 6G60) get : synonym of "take" get out / get up / get off : without direct object, synonym of "exit" get in /get into : with direct object, synonyms of "enter"; (I7 only - without object, synonym for "enter") get on / get onto : with direct object, synonyms of "enter" get off : synonym of "exit" get ... from : synonym of "take" (revised from I6 - synonym of "remove ... from") give / feed / offer / pay : give something to a creature, multiple syntaxes (6G60 missing "give ... over to" grammar) go / run / walk : go in a direction go in / go inside : with no object, synonyms of "go inside"; with direct object, synonyms of "enter" go into / go through : synonyms of "enter" run in / run into : synonyms of "enter" run inside / run through : synonyms of "enter" walk in / walk into : synonyms of "enter" walk inside / walk through : synonyms of "enter" insert ... in / insert ... into : synonyms of "put ... into" inventory / inv / i : list what is carried or worn by the player character jump / hop / skip : jump kiss / embrace / hug : kiss someone leave : standalone, synonym of "exit" (I7 only); with direction, synonym of "go" listen / hear : standalone, = listen to the location in general; w/object = listen to a specific thing lock .. with : lock something with another thing look : standalone, display description of the location and its contents; with direction, = "examine" look at : synonym of "examine" look into / look in : synonyms of "search" look inside / look through : synonyms of "search" look under : look under something look up .. in : synonym of "consult" look to : with direction, synonym of "examine" no : say no (to the narrator or parser, more than to a person) open / uncover / unwrap : synonyms of "open" pick up / pick ... up : synonyms of "take" pull / drag : pull something push / press / move : with object, push something; with object and direction, push something to another room shift / clear : synonyms of "push" push ... to / move .. to : with object and direction, push something to another room (vs. I6, "transfer" action) put ... into / put ... in : place something inside of a container put ... inside : synonym to "put ... into" put ... onto / put .. on : place something on top of a supporter put on : with object, synonym of "wear" put down / put ... down : with direct object(s), synonym of "drop" read : synonym of "examine" read about ... in / read ... in : synonym of "consult" remove : synonym of "take off" (technically also a lower-priority synonym for "take") rub / wipe / polish / shine : rub something (with player character's hands, by default) clean / dust / scrub / sweep : synonyms of "rub" search : explore something more closely via manual manipulation set / adjust : set a mechanical thing to a specific setting [modified here] shed / disrobe / doff : with worn object, synonyms of "remove" show / show ... to : show something to a person present / present ... to : synonym of "show" display / display ... to : synonym of "show" shit / damn / fuck : recognized impolite swearing, with topic or standalone [modified here] sleep / nap : sleep sing : sing an unspecified song sit on / sit in / sit inside : synonyms of "enter" sit on top of : synonym of "enter" smell / sniff : standalone, smell the air in the location; with an object, smell the object sorry : apologize (to the narrator or parser, more than to a person) squeeze / squash : squeeze something stand / stand up : synonyms of "exit" stand on : synonym of "enter" swing / swing on : either swing something or swing on something (same action used internally) switch on : synonym of "turn on" switch / switch ... on : synonyms of "turn on" switch off / switch ... off : synonym of "turn off" take / carry / hold : pick up something, adding it to your carried inventory take off : stop wearing worn object and add it to carried inventory take ... from / take ... off : synonym of "take" (vs. I6, synonym of "remove ... from") take inventory : synonym of "inventory" taste : taste a small portion of something tell ... about / tell ... to : tell someone about a topic think : think about an unspecified subject tie / attach / fasten / fix : with direct object and optional indirect object, physically secure one thing to another turn / rotate / twist : rotate an object physically screw / unscrew : synonyms of "turn" turn on : activate a device turn off : deactivate a device wave : standalone, wave hand in the air; with object, move it back and forth in air with hand wear / don : start wearing a wearable object yes / y : say yes (to the narrator or parser, more than to a person) undo : take back last move in current session; (usage with objects disabled in 6G60) unlock ... with : unlock something with another thing wait / z : allow time to pass without doing anything wake / wake up : with no object, wake up from a presumed dream; with direct object, try to wake that person wake .. up : synonym for "wake" (with direct object) Note that certain potentially legal commands in standard I6 are not in the above list because they seem to be more a product of programmer convenience than actual examples of English (e.g. "discard ... against" being equivalent to "throw ... at", "leave into" being equivalent to "enter", "hold off" being equivalent to "take off" for clothing, "unscrew ... on" being equivalent to "turn on"). In addition, some abandoned commands that don't seem very necessary given the presence of much more likely synonyms (i.e. "undo" in the sense of "open" or "unlock") are omitted. In this implementation, the following Inform 6 standard commands have been reenabled but may work differently than their original I6 library versions: OUT OF WORLD ACTIONS die : synonym for "quit" command full score/fullscore/full : produce more detailed report of score with breakdown by reason for score (Easy Achievements.i7x) noscript/unscript : synonyms for "transcript off" objects : display a list of objects handled by the player character places : display a list of rooms visited by the player character IN WORLD ACTIONS blow : blow air on/into something dig/dig ... with : dig a hole in something, using something as a digging tool empty : empty a container of its contents empty ... into : empty contents of a container into another container empty ... onto : empty contents of a container onto a supporter enter : verb alone version only, functional synonym of "go inside" exit : with a direct object, as the "disembarking" action fill : fill a container (with an available liquid or mass noun) fondle / grope : synonyms of "touch" give over ... to : synonym of "give" hear : without direct object, synonym of "listen" inventory tall : show inventory in indented list format inventory wide : show inventory in prose paragraph format jump over : jump over something hop over / skip over : synonyms of "jump over" leave : with direct object, synonym of "exit" (with object) leave through : synonym of "exit" leave in / leave inside : synonym of "exit" lie on / lie in / lie inside : synonyms of "enter" lie on top of : synonym of "enter" look on : synonym of "search" look to : with a direction, synonym of "examine" peel / peel off : synonyms of "remove ... from" pray : pray to a higher power remove .. from : functional synonym of "take" (vs. I6, "remove" action) move .. to : synonym of "put .. in" or "put .. on" or "take" or "give ... to", as appropriate sod : recognized impolite swearing swim /dive : swim in something, presumably liquid transfer .... to : synonym of "move .... to" In addition, the following I6 standard functionality is not supported (commands and actions that are beyond the author's skill level to emulate, or which don't seem recognized by the original Spiritwrak, and/or which would serve no purpose here): OUT OF WORLD ACTIONS recording on*/recording* : begin saving player commands to an external file recording off* : stop saving player commands to an external file replay* : read external command file and "play back" commands in current session changes on*/changes* : begin displaying information about all changes to object states changes off* : stop displaying information about all changes to object states goto* : change player to a specific location referenced by object number routines on*/routines* : synonym of "messages on" routines off* : synonym of "messages off" messages on*/messages* : begin showing all messages passed (i.e. function calls and parameters) within storygame program messages off* : stop showing all messages passed within storygame program timers on*/timers* : begin showing the state of all timers and daemons currently active timers off* : stop showing the state of all timers and daemons currently active daemons on*/daemons* : synonym of "timers on" daemons off* : synonym of "timers off" IN WORLD ACTIONS pry / prise / lever/ force : multiple syntaxes using direct/indirect objects and prepositions, all synonyms of "unlock" prize / jemmy : synonyms of "pry" ] Section - Digging [This was an I6 standard verb, and it is recognized by the original "Spiritwrak," but it serves no purpose in the game as originally designed. In light of its lack of utility, this implementation initially tried to reactivate the (presumedly) buried I6 Dig action logic (following examples in the Standard Rules) instead of replacing it with a logical equivalent in the I7 layer. However, extensive experimentation (including forcible attempts to display library messages via embedded I6 code snippets), made it appear that the I6 Dig action's library message is simply unavailable. Digging is a troublesome action to have as a default, since recognizing the verb implies the ability to dig and this capability is rarely called for, so it makes sense that it would be cast aside as Inform evolves.] Digging is an action applying to one thing. Understand "dig around in [something]" or "dig in [something]" or "dig through [something]" or "dig [something]" or "dig" as digging. Rule for supplying a missing noun when digging (this is the emergency noun for digging action rule): now the noun is the location. Check an actor digging somewhere (this is the block digging in the ground rule): say "Digging would achieve nothing here." instead. Check an actor digging something (this is the block digging a thing rule): say "It doesn't look like it's possible to dig into [the noun]." instead. Section - Emptying [This was a library action in Inform 6 (see DM4, p. 525) that is no longer included by default in I7 6G60. Though infrequently of use, this action is reimplemented here, though in a slightly different manner than the original library version. Note that, after finishing with this, it was pointed out to me on IFMUD that Emily Short already wrote an extension to handle these verbs. You are probably much better served by using her version, which also handles NPCs doing these things. Also note that this action will register as a success even if nothing is actually emptied due to interfering rules -- a side effect of being unable to fail a rule after the check rules stage in 6G60.] Emptying is an action applying to one thing. The emptying action has a list of things called dumped items. Understand "empty [something]" or "empty out [something]" or "empty [something] out" as emptying. Setting action variables for emptying: truncate dumped items to zero entries. Check emptying something (this is the can't empty things that aren't containers rule): if the noun is not a container: say "[The noun] can't contain things, so [object pronoun of the noun] can't be emptied."; rule fails. Check emptying a closed container (this is the can't empty closed things rule): say "[The noun] [is-are]n[']t open."; rule fails. Check emptying an open empty container (this is the can't empty things that are already empty rule): say "[The noun] [is-are] already empty."; rule fails. Carry out emptying something (this is the emptying something transforms into taking then dropping everything in it rule): repeat with emptied item running through things in the noun: silently try taking emptied item; if the player carries emptied item: silently try dropping emptied item; if the player does not carry emptied item: add emptied item to dumped items. Report emptying something (this is the standard report emptying rule): if dumped items is not empty: say "The [dumped items] spill[if the number of entries in dumped items is 1]s[end if] to the ground[if the noun is not empty], but [the list of things in the noun] [is-are] still in [the noun][end if]." Section - Emptying It Into [This was a library action in Inform 6 (see DM4, p. 525) that is no longer included by default in I7 6G60. Though infrequently of use, this action is reimplemented here, though in a slightly different manner than the original library version. Note that, after finishing with this, it was pointed out to me on IFMUD that Emily Short already wrote an extension to handle these verbs. You are probably much better served by using her version, which also handles NPCs doing these things. Also note that this action will register as a success even if nothing is actually emptied due to interfering rules -- a side effect of being unable to fail a rule after the check rules stage in 6G60.] Emptying it into is an action applying to one carried thing and one thing. The emptying it into action has a list of things called deposited items. Understand "empty [something] into [something]" as emptying it into. Setting action variables for emptying something into: truncate deposited items to zero entries. Check emptying something into something (this is the can't empty non-containers into something rule): if the noun is not a container: say "[The noun] can't contain things, so [object pronoun of the noun] can't be emptied."; rule fails. Check emptying something into something (this is the can't empty things into non-containers rule): if the second noun is not a container: say "There is no place in [the second noun] to put the contents of [the noun]."; rule fails. Check emptying a closed container into something (this is the can't empty closed things into things rule): say "[The noun] [is-are]n[']t open."; rule fails. Check emptying an open empty container into something (this is the can't empty empty things into things rule): say "[The noun] [is-are] already empty."; rule fails. Check emptying an open container into a closed container (this is the can't empty things into closed things rule): say "[The second noun] [is-are]n[']t open."; rule fails. Carry out emptying something into something (this is the emptying something into transforms into taking then inserting into everything in it rule): repeat with emptied item running through things in the noun: silently try taking emptied item; if the player carries emptied item: silently try inserting emptied item into the second noun; if the player does not carry emptied item: add emptied item to deposited items. Report emptying something into something (this is the standard report emptying into rule): if deposited items is not empty: say "The [deposited items] [if the number of entries in deposited items is at least two]are [else]is [end if]now in [the second noun][if the noun is not empty], but [the list of things in the noun] [is-are] still in [the noun][end if]." Section - Emptying It Onto [This was a library action in Inform 6 (see DM4, p. 525) that is no longer included by default in I7 6G60. Though infrequently of use, this action is reimplemented here, though in a slightly different manner than the original library version. Note that, after finishing with this, it was pointed out to me on IFMUD that Emily Short already wrote an extension to handle these verbs. You are probably much better served by using her version, which also handles NPCs doing these things. Also note that this action will register as a success even if nothing is actually emptied due to interfering rules-- a side effect of being unable to fail a rule after the check rules stage in 6G60.] Emptying it onto is an action applying to one carried thing and one thing. The emptying it onto action has a list of things called strewn items. Understand "empty [something] onto [something]" as emptying it onto. Setting action variables for emptying something onto: truncate strewn items to zero entries. Check emptying something onto something (this is the can't empty non-containers onto something rule): if the noun is not a container: say "[The noun] can't contain things, so [object pronoun of the noun] can't be emptied."; rule fails. Check emptying something onto something (this is the can't empty things onto non-supporters rule): if the second noun is not a supporter: say "There is no place on [the second noun] to put the contents of [the noun]."; rule fails. Check emptying a closed container onto something (this is the can't empty closed things onto things rule): say "[The noun] [is-are]n[']t open."; rule fails. Check emptying an open empty container onto something (this is the can't empty empty things onto things rule): say "[The noun] [is-are] already empty."; rule fails. Carry out emptying something onto something (this is the emptying something onto transforms into taking then putting on everything in it rule): repeat with emptied item running through things in the noun: silently try taking emptied item; if the player carries emptied item: silently try putting emptied item on the second noun; if the player does not carry emptied item: add emptied item to strewn items. Report emptying something onto something (this is the standard report emptying onto rule): if strewn items is not empty: say "The [strewn items] [if the number of entries in strewn items is at least two]are [else]is [end if]now on [the second noun][if the noun is not empty], but [the list of things in the noun] [is-are] still in [the noun][end if]." Section - Filling [This was a default library action in I6 that is probably wisely omitted in the I7 Standard Rules, because it implies to the player that liquid handling will be universally available. In fact, handling of liquids is a painful-to-implement feature that is only found in certain games, and Spiritwrak release 3/960606 is not one of them. Nonetheless, it is included here because some of the I6 'before()' actions specified in the original source code have sections for the I6 Fill action. In keeping with the style of action handling used here, the general response uses a report rule even though it is phrased as a negative result. It's tempting to go for a more comprehensive treatment here so that a second noun is involved, which would allow better handling of touchability rules and potential uses like ">fill flower pot with coins", but that's being put aside for another day. [IMPDO]] Filling is an action applying to one carried thing. Understand "fill [something]" as filling. Check filling when the noun is not a container (this is the can't fill non-containers rule): say "[The noun] can't be filled." instead. Report filling (this is the default report filling rule): say "But there's no water here to carry."; rule fails. [note that this does not result in failure of the action, at least in 6G60] Section - Lying On Understand "lie on top of [something]" or "lie in/on/inside [something]" or "lie down in/on/inside [something]" as entering. Section - Moving It To (and "Move" command redefinition) [Inform 6 understands commands in the form ">move X to Y", with logic to modify the action to an I6 Insert or PutOn action as appropriate. This is probably the kind of command only a new player would use, but it is included to bring this implementation's function closer to the original "Spiritwrak". See notes in modified action "Pushing It To" for additional and related logic.] [Since I7 6G60 uses the command "move" as a synonym of "push", it is necessary to first redefine the grammar for this command.] Understand the command "move" as something new. Understand "move [something]" as pushing. Understand "move [direction]" as going. Understand "move [something] [direction]" or "move [something] to [direction]" as pushing it to. [Now the action itself, with applicable new grammar placed after I7 6G60 standard grammar.] Moving it to is an action applying to two things. Understand "move [something] to [something]" or "transfer [something] to [something]" as moving it to. Definition: A thing is move-suitable if it is a container or it is a supporter or it is a person. [The following rule mimics original "Spiritwrak" behavior, adjusted to check for whether second noun is on floor.] Instead of moving something to something when the second noun is not move-suitable and the holder of the second noun is the location (this is the treat moving something to something on the ground as dropping rule): try dropping the noun instead. [The following three rules improve over original "Spiritwrak" behavior.] Instead of moving something to something when the second noun is not move-suitable and the holder of the second noun is a container (this is the treat moving something to something in a container as inserting into same container rule): try inserting the noun into the holder of the second noun instead. Instead of moving something to something when the second noun is not move-suitable and the holder of the second noun is a supporter (this is the treat moving something to something on a supporter as putting it on same container rule): try putting the noun on the holder of the second noun instead. Check moving something to something that is not move-suitable (this is the move to destination must be a container or supporter rule): say "[The second noun] doesn't seem appropriate for your purpose." instead. Carry out moving something to a container (this is the reroute moving things to a container as inserting it into rule): try inserting the noun into the second noun. Carry out moving something to a supporter (this is the reroute moving things to a supporter as putting it on rule): try putting the noun on the second noun. Carry out moving something to the player (this is the treat moving something to yourself as taking it rule): try taking the noun instead. Carry out moving something to a person (this is the treat moving something someone else as giving it to rule): try giving the noun to the second noun instead. Section - Peeling It From [Due to some tricky interaction between competing phrasing -- "peel X off Y" vs. "peel X off" -- this command is given an action that is always transformed to another action.] Peeling it from is an action applying to two things. Understand "peel [something] from [something]" or "peel [something] off of [something]" or "peel [something] off [something]" or "peel [something] off" or "peel off [something]" or "peel [something]"as peeling it from. Rule for supplying a missing second noun while peeling (this is the try to find a suitable implicit second noun when peeling rule): if the noun is in a container or the noun is on a supporter: now the second noun is the holder of the noun; if the noun is part of something (called greater body): now the second noun is greater body; [override previous choices] if the second noun is nothing: say "[The noun] [if the noun is plural-named or the noun is the player]do[else]does[end if] not seem to be attached to anything at the moment."; stop the action. Carry out peeling something from something (this is the convert peeling it from to removing it from rule): try removing the noun from the second noun instead. Section - Praying (PraySub) [Note that some of the logic attached to the PraySub routine in the original source code has been moved to an "every turn" rule in the "Maximum Hit Points" section. It does not work precisely the same as the original; see that section for details.] Praying is an action with past participle prayed, applying to nothing. Understand "pray" as praying. [without specific past participle, it is assumed to be "praied"??] To indicate prayer is unavailable: say "You make a prayer and feel no spiritual response! Have the Deities forsaken you? Or have you found a place where even the Gods cannot provide guidance?" Check praying when spellcasting-blocked is true (this is the praying won't work when spells are blocked rule): indicate prayer is unavailable; rule fails. Check praying when the player is in Aetherium (this is the praying won't work in Atrii rule): indicate prayer is unavailable; rule fails. [Note that the following rule is not strictly necessary, as praying is already blocked by the "out-of-body experience limits actions" rule. However, the original source code includes equivalent logic, so this is left in as a guide to original author intent if further modifications are made.] Check praying when the player is in Fiery Realm (this is the praying won't work in Hades rule): indicate prayer is unavailable; rule fails. Report praying (this is the default report praying rule): say "You make a quick but respectful prayer to the Deities above, asking for Divine Guidance in your quest. You finish and feel spiritually renewed." After praying (this is the lucky 97 prayer rule): let i be a random number from 1 to 100; if i is 97: now the current hit points of the player is the maximum hit points of the player; say "You make a quick but respectful prayer to the Deities above, asking for Divine Guidance in your quest. A saffron glow surrounds you and you feel spiritually and physically renewed!"; otherwise: continue the action. [will use normal report rule] Section - Praying Specifically [Per WWI 16.20 Understanding Mistakes, this may not be the best way to handle the job of rerouting this command. However, this leaves room for rules about specific topics, should it be desirable to respond to them specifically.] Praying specifically is an action out of world applying to one topic. Understand "pray to [text]" or "pray for [text]" or "pray that [text]" or "pray [text]" as praying specifically. Check praying specifically (this is the explain prayer rule): say "[one of]You stumble over the words as you start your prayer, suddenly remembering [or]You recall [stopping]Brother Palemon's advice on the topic: 'Simply pray, Brother. The deities will know your mind without you spelling it out, and the right ones will hear." Section - Swimming In Swimming in is an action applying to one thing. Understand "swim" or "swim in [something]" or "dive" or "dive in/into [something]" as swimming in. Rule for supplying a missing noun when an actor swimming in (this is the assume swimming in location if no noun specified rule): now the noun is the location. Report swimming in (this is the default report swimming rule): say "There's not enough water in which to swim." Part - General Objects and Scenes Chapter - Generally-Available Backdrops [This section was intended to hold things in the game universe that would appear identically in several parts of the world. In practice, this has turned out to include very little, since this was not required for any serious functionality. The section is left as a stub for potential future expansion and/or reorganization.] Section - Seawater, note about [Note that the seawater backdrop can be found many places, but its code has been placed in the chapter for "On-Fublio-Bay" in part "Fublio Valley", where it is most likely to be of interest.] Section - Snow (snow) [Note that the snow object is declared in SPIRIT.INF in the original source code, but this implementation includes it in many locations in which it does not appear in the original, for consistency. The presence of the snow is declared locally in each place it can be found. Also note that, in the original source code, this object made use of the I6 'general' attribute to track whether it was concealing the broken-off top of the obelisk. This implementation gives it the more descriptive property "concealing the tip." Finally, note that some logic attached to the object relevant to locating the top of the obelisk has been moved to the location where this behavior applies ("Snowy Intersection").] There is a mass-nouned backdrop called some snow. The snow can be concealing the tip. The description of the snow is "Cold, white and not in short supply." Instead of taking the snow (this is the snow melts on contact rule): say "It melts into nothing soon after." Instead of digging the snow (this is the interpret digging the snow as searching it rule): try searching the snow instead. To discourage wasting time with the snow: say "It's fun to play in the snow, but your attention soon returns to your quest." Instead of pushing or pulling or folding or rubbing or squeezing or rolling up or turning or shaking or attacking the snow (this is the playing with snow is unproductive rule): discourage wasting time with the snow. After touching the snow (this is the hmmm snow-like rule): say "It's crisply cold." Section - Sunlight There is an unimportant mass-nouned immaterial backdrop called some sunlight. [This backdrop appears in multiple locations. You will find its presence declared locally in each case.] Chapter - Utility Scenes Section - Expectant Pause [This is a little scene intended to allow creation of interaction where a "yes" or "no" response will be intercepted with something more appropriate than the normal response about rhetorical questions. Note that this functionality did not exist in release 3/960606, so it and all associated responses are new to this implementation. For a core kind used here, see "Binary Reply" under "New Kinds".] Expectant Pause is a recurring scene. Expectant Pause has an binary reply called active reply. Expectant Pause has a person called question-poser. Expectant Pause has a truth state called restart flag. Expectant Pause has a time called expected completion time. To create an expectant pause for (question posed - a binary reply): now the active reply of Expectant Pause is the question posed. To create an expectant pause with (questioner - a person) asking (question posed - a binary reply): if Expectant Pause is happening: now the restart flag of Expectant Pause is true; now the question-poser of Expectant Pause is the questioner; now the active reply of Expectant Pause is the question posed; now the expected completion time of Expectant Pause is time of day plus two minutes. Expectant Pause begins when the active reply of Expectant Pause is not unused binary reply or the restart flag of Expectant Pause is true. Expectant Pause ends when the restart flag of Expectant Pause is false and time of day is the expected completion time of Expectant Pause. [This method of triggering the scene's end is to try to get around some timing weirdness that happens when the scene is restarted in 6G60.] Instead of saying yes during Expectant Pause (this is the provide active positive rejoinder rule): say the positive rejoinder of the active reply of Expectant Pause with an extra line break. Instead of saying no during Expectant Pause (this is the provide negative positive rejoinder rule): say the negative rejoinder of the active reply of Expectant Pause with an extra line break. Instead of answering the question-poser of Expectant Pause that "yes" during Expectant Pause (this is the reroute saying yes to question-poser to just saying yes during expectant pause rule): try saying yes instead. Instead of answering the question-poser of Expectant Pause that "no" during Expectant Pause (this is the reroute saying no to question-poser to just saying no during expectant pause rule): try saying no instead. Instead of asking the the question-poser of Expectant Pause to try saying yes during Expectant Pause (this is the reroute asking question-poser to say yes to just saying yes during expectant pause rule): try saying yes instead. Instead of asking the the question-poser of Expectant Pause to try saying no during Expectant Pause (this is the reroute asking question-poser to say no to just saying no during expectant pause rule): try saying no instead. Every turn when the restart flag of Expectant Pause is true during Expectant Pause (this is the disable restart flag for expectant pause if set rule): now the restart flag of Expectant Pause is false. When Expectant Pause ends (this is the rejoinder cleanup rule): now the active reply of Expectant Pause is unused binary reply; now the question-poser of Expectant Pause is the default value of person. Chapter - Key Scenes Section - Introductory Sequence Introductory Sequence is a scene. Introductory Sequence begins when the player is in Monastery Chapel and Introductory Sequence has not happened. Introductory Sequence ends when the the player can see Brother Joseph and the player cannot see the Rod of the Ancients. Some fellow Brothers of the Order are a person. "All around you, fellow Brothers of the Order are standing, chanting. Their eerie, droning voices reverberate in the air." Understand "Brotherhood" or "monks" as the fellow Brothers of the Order. When Introductory Sequence begins: now Brother Joseph is in Monastery Chapel; now some fellow Brothers of the Order are in Monastery Chapel; Joseph emerges from meditation in zero turns from now; Joseph starts speaking in one turn from now; Joseph describes the Order in two turns from now; Joseph decries the death of magic in three turns from now; Joseph announces his plan in four turns from now; Joseph's folly begets disaster in five turns from now. There is an unimportant scenery thing called some slightly scorched walls. There is an unimportant scenery thing called a reek of brimstone. Understand "sulphurous" or "stench" as the reek of brimstone. After smelling in the presence of the reek of brimstone (this is the stench of brimstone rule): say "A sulphurous stench lingers in the air here." When Introductory Sequence ends: now the description of Monastery Chapel is "You are in the Monastery Chapel, the site of the recent appearance of the legendary Anabais. Signs of the recent visit include the slightly scorched walls, and the reek of brimstone. Wooden pews are arranged in a circle around the central altar. The exit is south."; now the current pose of Brother Joseph is "Brother Joseph is here, standing by the altar."; now Brother Joseph is in a state of meditation; remove the fellow Brothers of the Order from play; now the altar is damaged; now the slightly scorched walls are in Monastery Chapel; now the reek of brimstone is in Monastery Chapel; move the player to the sleeping pallet; say "You awaken in your room in a cold sweat. Was it all a terrible dream?[paragraph break]After a few moments of reflection, you decide to seek guidance from Brother Joseph. At this time of day, he can usually be found meditating in the chapel, in the northwest corner of the monastery." At the time when Joseph emerges from meditation: now the current pose of Brother Joseph is "At the front of the chapel, Brother Joseph is addressing the Brotherhood. The Rod of the Ancients is clutched tightly in his hand."; say "Brother Joseph's sonorous voice fades, and he looks searchingly at the ceiling for a long moment. He turns towards the gathered Brotherhood, gripping the Rod tightly." At the time when Joseph starts speaking: now the current pose of Brother Joseph is "At the front of the chapel, Brother Joseph is addressing the Brotherhood. He paces as he addresses the chanting monks, the Rod dangling from one hand at his side."; say "Brother Joseph now speaks directly to the entire Order.[paragraph break]'Fellow Brothers, the year, as you know, is 976 GUE. A difficult time indeed.[paragraph break]'Ten years have passed since the Cataclysm brought forth by the Circle of Enchanters changed our world forever. The outside world as we know it is in turmoil. A period of great change is upon all of us.'" At the time when Joseph describes the Order: now the current pose of Brother Joseph is "At the front of the chapel, Brother Joseph is addressing the Brotherhood. He emphasizes his points with flourishes of the Rod."; say "Brother Joseph continues to speak.[paragraph break]'Our order has always maintained the strictest secrecy. Few outside of our order know of our existence. We are the keepers of the mystic balance, that which embodies pure magic that can keep our world safe. It has always been thus -- we watch over all of Quendor, never interfering in the affairs of others, yet striving to maintain harmony.'" At the time when Joseph decries the death of magic: now the current pose of Brother Joseph is "At the front of the chapel, Brother Joseph is addressing the Brotherhood. He grimly contemplates the Rod of the Ancients, held before him."; say "Brother Joseph continues to speak.[paragraph break]'But we can no longer depend on enchantments to keep outsiders at bay. Magic as we know it is dying. The dreaded Age of Science is already upon us. In a short time, our order will be discovered, and the balance will be no more.[paragraph break]'Many of our order have gone out into the world in secret, attempting to repair what has been broken, but alas, this appears to be an impossible goal.'" At the time when Joseph announces his plan: now the current pose of Brother Joseph is "At the front of the chapel, Brother Joseph is gazing intently at the Rod of the Ancients and a small, white cube, both of which are raised high above his head."; say "Brother Joseph continues.[paragraph break]'I have brought you all forth today to say that, although we cannot protect the future of Quendor, we can protect ourselves!'[paragraph break]He holds the Rod of the Ancients high. 'This holy Rod, which the Ancient Ones used to defeat the demon Anabais, has the power to protect our order.'[paragraph break]Joseph's other hand darts into the folds of his robes, and emerges clutching a small object. 'I have discovered a lost mystic cube!' He holds a white, featureless cube high in his other hand. 'This cube, when joined with the Rod of the Ancients, will preserve our order forever, sequestering all of us in another time, another place!'" At the time when Joseph's folly begets disaster: remove the Rod of the Ancients from play; say "There is a momentous pause.[paragraph break]Brother Joseph looks over the entire Order. 'May the Gods smile down upon us on this day! We go now, into the unknown!' He triumphantly joins the white cube to the end of the Rod of the Ancients.[paragraph break]At the moment they touch, a blinding white flash sears your eyes! The chanting is instantly broken by a tremendous thunderclap! Brother Joseph is thrown back by a great force, and to your horror, the Rod of the Ancients breaks apart![paragraph break]Four pieces now float serenely above the altar, above a strange black globe that crackles with energy.[paragraph break]'AT LAST!'[paragraph break]The voice comes from nowhere and everywhere. The black sphere pulsates with lightning.[paragraph break]'ANABAIS IS FREE AGAIN!'[paragraph break]The voice pauses. 'I see you found my [']mystic['] cube, Joseph. I knew that someday, someone would find it, and free me from my prison.' The voice pauses again. 'To show my gratitude, I will scatter this broken symbol to the corners of the world!' The pieces of the rod disappear in a rippling report.[paragraph break]'Watch out!' someone cries. The black sphere suddenly expands with alarming speed. Seconds later, a violent explosion seems to jar the very ground you stand on, and a black void covers all." Instead of doing something other than looking, listening, examining or waiting during Introductory Sequence (this is the introductory sequence is railroaded rule): say "You are caught up in the collective chanting, and cannot break your concentration to do much of anything else." Instead of examining something during Introductory Sequence (this is the redirect examination action to looking action during introduction rule): say "Caught up in the ceremony, your eyes are drawn away from [the noun] and back to your surroundings."; try looking instead. After listening in the presence of some fellow Brothers of the Order during Introductory Sequence (this is the chanting monks make chanting sounds rule): say "You hear heavy chanting." Section - The Eruption of Mount Saint AFGNCAAP The Eruption is a scene. The Eruption begins when the toy volcano is underwater and The Eruption has not happened. The Eruption ends when the progression of the toy volcano is complete. When The Eruption begins (this is the uh-oh now you've done it rule): now the eruption site of the toy volcano is the location of the toy volcano; now the eruption receptacle of the toy volcano is the holder of the toy volcano; remove the toy volcano from play. Every turn when the progression of the toy volcano is inert and the eruption receptacle of the toy volcano is not the seawater and the player can see the eruption receptacle of the toy volcano during The Eruption (this is the lack of water limits eruption size rule): now the progression of the toy volcano is peak; [will be set to complete same turn by another rule] now the mini-volcano is in the eruption site of the toy volcano; say "The volcano hisses and spits and starts to grow! As it breaks the surface of the water, it sputters to a stop, and a wisp of steam coming from its top quickly dissipates." The lack of water limits eruption size rule is listed before the inevitable chain reaction rule in the every turn rules. To rework the bay geography: now the coastline is altered; move the small volcanic island backdrop to all rooms that are On-Fublio-Bay; now the tall grasses are off-stage; now the deep marsh is in Grassland Beach; now the half-submerged cave is off-stage; now the small dark tunnel is flooded; change the northeast exit of On-Fublio-Bay to Near Submerged Lighthouse; change the southwest exit of Near Submerged Lighthouse to On-Fublio-Bay; change the east exit of Near Submerged Lighthouse to Lighthouse Upper Level; change the inside exit of Near Submerged Lighthouse to Lighthouse Upper Level; change the west exit of Lighthouse Upper Level to Near Submerged Lighthouse; change the outside exit of Lighthouse Upper Level to Near Submerged Lighthouse; change the southeast exit of On-Fublio-Bay to On-Volcanic-Island; change the northwest exit of On-Volcanic-Island to On-Fublio-Bay. To effect world changes from the eruption: if the eruption site of the toy volcano is in Navigable Waters: now the small sailboat is damaged; now the sailboat is in Grassland Beach; if the eruption site of the toy volcano is On-Fublio-Bay: rework the bay geography; now the farmer carries the silver sphere; if the eruption site of the toy volcano is Lost at Sea: move the small volcanic island backdrop to all rooms that are Lost at Sea; remove the land from play; [the "absent" land for Lost At Sea] [Note that the following procedure creates a temporary variable "former location" because the player is most likely in the sailboat when it is moved. Also note the use of a restriction when calculating best route to cut down on the processing time required to find it.] When The Eruption ends (this is the now for some havoc rule): let former location be the location; effect world changes from the eruption; if the eruption site of the toy volcano is not in Navigable Waters: do nothing; otherwise: if the former location is the eruption site of the toy volcano: say "Suddenly, the water around you literally lifts you into the sky in an enormous explosion! The last thing you see is the emerging mouth of an active and hungry volcano!"; end the game in death; else if the former location is in Navigable Waters: let eruption location be the eruption site of the toy volcano; let explosion heading be the best route from the former location to eruption location through rooms in Navigable Waters; [if set to nothing this is presumed to mean the location is Lost at Sea, which has no map connections to locations closer to shore] say "You hear a large explosion off to the [if explosion heading is nothing]north[else][explosion heading][end if]! A massive tidal swell rushes by and tosses your small craft violently, knocking you into the water. As you watch the waves carry the boat away, a giant grouper swims up and swallows you."; end the game in death; else if the former location is adjacent to a room in Navigable Waters: say "The sound of a massive explosion comes from the south! You turn and rub your eyes in disbelief. There's a volcano rising out of the sea! Unfortunately, there's also a large tidal wave headed your way (caused by the eruption, no doubt) which engulfs you as you try to scramble for higher ground.[paragraph break]You struggle valiantly, but drown in deep water."; end the game in death; else: say "You hear a massive explosion in the distance! It sounded pretty far off, but whatever it was, it was loud." Section - The Quest for the Holy Brew Coffee Quest is a scene. Coffee Quest begins when the Implementor is considering caffeine or (Coffee Quest is not happening and Coffee Quest has not ended and the player has been in Celestial Apartment for ten turns). Coffee Quest ends when the Implementor is asleep or the awake recharged Implementor is in Strange Bedroom or the player is not in Celestial Apartment. When Coffee Quest begins (this is the ensure coffee run starts when scene begun by waiting rule): now the Implementor is considering caffeine. [Since the PC is not normally able to return to the Implementor's apartment, this rule is not truly needed. It just seems like a good idea to keep the world-state consistent with expectations for possible future use. As you can see, it's quite easy to leverage the developed set of rules, so this is not much hassle.] This is the resolution of Coffee Quest in absentia rule: if the Implementor is not recharged and the Implementor is not duped by decaf: [on way to get coffee or not started] now the Implementor is seeking coffee; now the Implementor is in the Strange Kitchen; consider the coffee-making rules; now the Implementor is in Strange Room; [on way back] consider the Imp sleeps if coffee was sabotaged rule. When Coffee Quest ends (this is the tidy up the scene in Celestial Apartment at Coffee Quest's end rule): if the player is not in Celestial Apartment: follow the resolution of Coffee Quest in absentia rule. Every turn during Coffee Quest (this is the Coffee Quest scene drives coffee run rule): consider the coffee run rules. Section - Potentially Paradoxical scenes A scene can be potentially paradoxical. [The following check is only implemented in the original source code when returning to the Mystical Cave after visiting the construction site. However, since the PC is stripped of everything but the appropriate rod at the start of a time travel scene, it seems like a good idea to do the same on the scene's exit.] When a potentially paradoxical scene ends (this is the can't carry things on time travel return rule): now everything that is left behind when transported is off-stage. There is a closed unopenable container called the temporal detention chamber. It is fixed in place. To sequester future items from (R - a room): now every portable thing in R is in the temporal detention chamber. To restore future items to (R - a room): now everything in the temporal detention chamber is in R. Section - Planting the Red Rod Piece Planting the Red Rod Piece is a potentially paradoxical scene. Planting the Red Rod Piece begins when the crystal sphere is at hand and the current action is time-travel triggering behavior and the player carries the red rod piece. Planting the Red Rod Piece ends when the location of the statue of Babe Flathead is Stadium Entrance. [Note that part of the transition logic for this time-travel sequence involved turning off the I6 "visited" attribute for the Stadium_entrance location. It's not clear exactly why... perhaps this is a remnant of an earlier draft of the original that used the same location for the "present" and "past" versions. If the inclusion of this command is an oversight, it's not the kind of thing likely to be noticed, since there's little reason to return to the stadium after securing the trophy, which must have been accomplished by the time this change would occur. Since this implementation *does* use the same location for the "past" and "present" locations, it is important to take this into account. Thus the PC is moved to the location and then a looking action is forced. Whatever "lookmode" is set by the player will be respected.] When Planting the Red Rod Piece begins (this is the set the stage for planting the red rod piece rule): engage spell blocking; now the event sign is off-stage; now the statue of Babe Flathead is off-stage; now the square hole is in Stadium Entrance; sequester future items from Entrance to Flathead Stadium; the stadium statue is installed in two turns from now; now Stadium Entrance is unvisited; move the player to Stadium Entrance, without printing a room description; try looking. When Planting the Red Rod Piece ends (this is the red rod piece planted successfully rule): now the event sign is in Stadium Entrance; if the red rod piece is not in the square hole: [extra safety check] remove the red rod piece from play; restore future items to Entrance to Flathead Stadium; say "'That's perfect,' you hear a voice say, and the crowd murmurs in agreement. One of its members steps forward.[paragraph break]Why, it's Babe Flathead himself! He saunters up towards the statue, which is indeed a good likeness, and starts handing out cigars. 'We'll get to autographs later,' he says while lighting your cigar as you try to protest. Seconds later, the cigar explodes! You see sparkling stars, which slowly change to purple flashes. You blink."; move the player to Mystical Cave. Section - Planting the Brown Rod Piece Planting the Brown Rod Piece is a potentially paradoxical scene. Planting the Brown Rod Piece begins when the crystal sphere is at hand and the current action is time-travel triggering behavior and the player carries the brown rod piece. Planting the Brown Rod Piece ends when the portion of wall is finished and the current action is attacking the portion of wall. When Planting the Brown Rod Piece begins (this is the set the stage for planting the brown rod piece rule): engage spell blocking; the workman arrives in seven turns from now; move the player to Near Construction Site, without printing a room description; try looking. When Planting the Brown Rod Piece ends (this is the brown rod piece planted successfully rule): if the brown rod piece is not in the portion of wall: [extra safety check] remove the brown rod piece from play; say "The wall starts to glow a purple color, and you step back, to find your surroundings replaced by cold natural cave walls."; now the player is in Mystical Cave. To decide if no brick is handy: if the thick brick is not in Construction Site and the dusty brick is not in Construction Site: decide yes; otherwise: decide no. [Note that the following logic has been revised slightly from the original to prevent the mysterious vanishing of the "good" brick if the PC was holding it.] At the time when the workman arrives: if no brick is handy: now the portion of wall is finished well; otherwise if the thick brick is in Construction Site: remove the thick brick from play; now the portion of wall is finished well; otherwise if the dusty brick is in Construction Site: remove the dusty brick from play; now the portion of wall is finished poorly; now the portion of wall is closed; [prevent ability to see contents of finished wall by examining it] if the location is Construction Site: say "From behind some scaffolding, a construction worker appears. He walks to a part of the ditch and starts to make some finishing touches on part of a low wall. He finds a brick nearby and applies it to the wall with a good patch of mortar. [if the portion of wall is finished well]Brushing himself off, he walks off and is [else]He looks at the patch, somewhat unsatisfied, but then shrugs and walks off, [end if] soon out of sight."; otherwise if the location is Near Construction Site: say "You hear some brief construction-like noises from the east."; otherwise: [shouldn't be a third option possible, but...] do nothing. Section - Planting the Green Rod Piece Planting the Green Rod Piece is a potentially paradoxical scene. Planting the Green Rod Piece begins when the crystal sphere is at hand and the current action is time-travel triggering behavior and the player carries the green rod piece. Planting the Green Rod Piece ends when the green rod piece is in the mast. When Planting the Green Rod Piece begins (this is the set the stage for planting the green rod piece rule): engage spell blocking; the captain's patience runs out in 3 turns from now; move the player to Riding the Waves, without printing a room description; try looking. When Planting the Green Rod Piece ends (this is the green rod piece planted successfully rule): remove the green rod piece from play; now the old shipwreck is rod-bearing; say "There's a loud crack! The ship is breaking apart! Sailors scramble in vain for safety. You hang onto the side of the boat, but the vessel rocks wildly, and you fall into the waters.[paragraph break]As you sink, you notice the waters begin to change to a purplish hue, and you find yourself back in...[line break]"; now the player is in Mystical Cave. Section - Planting the Silver Rod Piece Planting the Silver Rod Piece is a potentially paradoxical scene. Planting the Silver Rod Piece begins when the crystal sphere is at hand and the current action is time-travel triggering behavior and the player carries the silver rod piece. Planting the Silver Rod Piece ends when the silver rod piece is in the broken stone top. [Note that, as with the "Planting the Red Rod Piece" scene, the scene logic must take into account the fact that the Snowy Intersection will be revisited. It is thus set to be unvisited at the start of the scene, and will be visited again before completion of the scene. In addition, note that the timed event rules occur after the every turn rules in the turn sequence rulebook per the Standard Rules. In this implementation, a timed event is used for waking the dragon in this implementation, but it is a separate every turn rule that contains the logic of what happens when it wakes up. As a result, the timed event is set one turn shorter than might be expected looking at the original source code.] When Planting the Silver Rod Piece begins (this is the set the stage for planting the silver rod piece rule): engage spell blocking; now the stone marker is not damaged; [force undamaged status since PC is time-traveling? logic specified in original] the sleeping dragon wakes in two turns from now; [player-perceived timing still same as original -- see above] now Snowy Intersection is unvisited; [make sure this seems like a new location to the player] sequester future items from Snowy Intersection; move the player to Giant Cavern, without printing a room description; try looking. When Planting the Silver Rod Piece ends (this is the silver rod piece planted successfully rule): now the snow is concealing the tip; if the silver rod piece is not in the broken stone top: [extra safety check] remove the silver rod piece from play; remove the broken stone top from play; restore future items to Snowy Intersection; say "As you place the rod piece in the broken stone piece, you sense a force from above pulling you! In moments, you are high above the snow covered mountains, nearing the top of the strangely purple sky."; now the player is in Mystical Cave. Chapter - Spell Definitions [Note that the original source code used the I6 'printed_name' property to store a description of what the spell did, with the I6 'short_name' property holding the magic word (e.g. "gnusto" or "feeyuk"). Since there is no direct equivalent to a short_name, this implementation lets the default printed name be the magic word and stores the description in a property called the "effect" of the spell. See the definition of the spell kind. Also note that, since spells are a kind of object and not a kind of thing, explicit understand rules must be declared or the spell's name won't be put into the game's dictionary of known words for player use.] Section - Gnusto (gnusto_spell) There is a known permanently-learned spell called gnusto. The effect of gnusto is "copy a chant into your prayer book". Understand "gnusto" as gnusto. [Note that, due to the specificity of the spell and the lack of a second noun condition, the following check rules get high precedence in the default rule ordering. Thanks to the permanently-learned status of gnusto, the following check rules are not forced to be placed after the "trying to cast a temporarily-learned spell at something always uses it up" rule. If it is made possible to forget a permanently-learned spell, specific rule ordering would be called for.] Check casting gnusto at a scroll when the player does not carry the second noun (this is the gnusto requires that you hold the source scroll rule): say "A gnusto chant would require close scrutiny of the scroll it is to copy, which you do not seem to be holding." instead. Check casting gnusto at the prayer book (this is the can't gnusto your own prayer book rule): say "Even if it worked, what would you gain?" instead. Check casting gnusto at a spellbook (this is the can't gnusto spell books rule): say "Your chant fails. Unlike scrolls, prayer books are magically guarded against the [']theft['] of their lore." instead. After casting gnusto at a scroll when the player does not carry the prayer book (this is the gnusto requires that you hold the prayer book rule): say "Your chant fails, as you have no prayer book." instead. After casting gnusto (this is the gnusto requires a target rule): say "The mystical energy of the chant dissipates, since you did not direct it at anything." instead. After casting gnusto at something that is not a scroll (this is the gnusto works on scrolls rule): say "Your chant goes unanswered. It needs a chant-bearing scroll as its target to work." instead. After casting gnusto at a scroll when the second noun is not inscribed with a spell (this is the gnusto fails on unenchanted paper rule): say "Your chant fails, as [the second noun] is illegible." instead. The gnusto fails on unenchanted paper rule is listed after the gnusto requires that you hold the prayer book rule in the after rules. After casting gnusto at a scroll (called font-of-knowledge) (this is the gnusto copies spells rule): if the lesson of font-of-knowledge is a simple spell: now the lesson of font-of-knowledge is known; [may not have read it] now the prayer book records the lesson of font-of-knowledge; [IMPDO - can this work for other spell books?] remove font-of-knowledge from play; say "[first time]Your prayer book begins to shake! [only]Slowly, ornately, the words of the [lesson of font-of-knowledge] chant are inscribed into the book with a violet glow. The book's brightness fades, but the chant remains! However, the scroll on which it was written vanishes as the last word is copied."; otherwise: say "Your prayer book begins to shake! Slowly, ornately, the words of the [lesson of font-of-knowledge] chant begin to flow across its pages. However, the spell's energy begins to flag long before the complex spell is completely transcribed. As the book's brightness fades, the words of the half-copied spell do likewise." [IMPDO - allow "copy to prayer book" to invoke gnusto?] Section - Frotz (frotz_spell) [Your basic all-purpose light spell, familiar to players of Infocom's Enchanter trilogy. However, it seems a little strange that when examining something enchanted by frotz that the light it gives off isn't mentioned at all, so there are some changes vs. the original Spiritwrak's logic.] There is a known spell called frotz. The effect of frotz is "cause an object to give off light". Understand "frotz" as frotz. After casting frotz at a person (this is the we have learned from the error of Enchanter rule): say "The chant, not designed for living creatures, is denied." instead. After casting frotz (this is the frotz is not useful when not targeted rule): say "There is a brief, blinding flash of light." After casting frotz at something not portable (this is the please don't frotz the scenery rule): say "An initial burst of light quickly fades[first time]. As you know well from your early practice with the spell, it works best on things you can carry in your hands[only]." A thing can be frotz-lit. After casting frotz at something portable (this is the frotz causes things to give off light rule): now the second noun is lit; now the second noun is frotz-lit; say "There is an almost blinding flash of light as [the second noun] begin[s] to glow! It slowly fades to a less painful level, but [the second noun] [is-are] now quite usable as a light source." After examining something frotz-lit (this is the point out the enduring effect of frotz rule): say the description of the noun; say "[paragraph break][Capitalized subject pronoun of the noun] continues to give off a steady light, due to the frotz spell cast upon it." [And just in case anything manages to cancel the spell somehow...] Every turn (this is the unlit things can't be frotz-lit rule): repeat with snuffed shiner running through frotz-lit things: if snuffed shiner is not lit: now snuffed shiner is not frotz-lit. Section - Bekdab (bekdab_spell) [Note that the effect of this spells is modified from the original because, in the original source code, messages in response to its use do not indicate that the iron is completely converted to rust, just that rusting occurs.] There is a spell called bekdab. The effect of bekdab is "cause iron to rust". Understand "bekdab" as bekdab. After casting bekdab (this is the untargeted bekdab does nothing rule): say "The chant, not directed at iron, fails." After casting bekdab at something (this is the bekdab usually does little rule): say "Your chant goes unanswered. I guess you need pure iron." Section - Egdelp (egdelp_spell) There is a spell called egdelp. The effect of egdelp is "create waxy build-up on wood". Understand "egdelp" as egdelp. [Note that the following is an instead rule, so no casting attempt will occur.] Instead of casting egdelp at the player (this is the furniture you are not rule): say "You look pretty polished as you are." [Note the slight change in wording to avoid implication it will auto-target.] After casting egdelp (this is the untargeted egdelp does nothing rule): say "The chant, not directed at wood to polish, fails." [Note the change in wording for the below rule to make it clear that the casting attempt occurred.] After casting egdelp at something (this is the egdelp normally does little rule): say "The chant dies on your lips halfway through, as it suddenly occurs to you that there is no good reason to coat [the second noun] with wax[first time]. The chant is wasted[only]." Section - Espnis (espnis_spell) There is a spell called espnis. The effect of espnis is "deliver dull sermon (cause sleep)". Understand "espnis" as espnis. Casting espnis at something is sermonizing. [see "Mountain Peak for why this is defined] [Note that because the message implies no casting attempt, the following is an instead rule, so no casting attempt will occur.] Instead of casting espnis at the player (this is the boring oneself is bad publicity rule): say "A preacher boring himself to sleep with his own sermon? That doesn't seem prudent." To indicate a lack of audience: say "Your sermon goes unheard." After casting espnis (this is the untargeted espnis does nothing rule): indicate a lack of audience. After casting espnis at something that is not a person (this is the dead matter can't be bored rule): indicate a lack of audience. After casting espnis at a person (this is the most people just tolerate boredom rule): [IMPDO - expand number of sermon topics?] say "[The second noun] listens as you begin your sermon about the general religious practices of the royal families of the past, but [subject pronoun of the second noun] only stifle[if the second noun is singular-named]s a yawn[else] some yawns[end if] when you finish." Section - Feeyuk (feeyuk_spell) [Note the slight change in both the spell effect's description and the messaging when casting feeyuk at something other than yourself, as compared to the original. It is an invitation to endless, useless player experimentation (or, even worse, a huge amount of authorial hassle) to imply that the spell worked on something or someone else.] There is a spell called feeyuk. The effect of feeyuk is "allow one to resist gravity". Understand "feeyuk" as feeyuk. Instead of casting feeyuk (this is the reroute casting feeyuk at nothing to casting at self rule): try casting feeyuk at yourself instead. Carry out casting feeyuk at yourself (this is the feeyuk imbues gravity resistance rule): now the player is gravity-resistant; gravity-resistance wears off in 75 turns from now. After casting feeyuk at something that is not a person (this is the limit feeyuk for the sake of sanity rule): say "The chant backfires, and your feet feel numb!" After casting feeyuk at a person that is not yourself (this is the feeyuk won't work on others rule): say "[The second noun] is unaffected; this chant works only on oneself." After casting feeyuk at yourself (this is the successfully cast feeyuk on PC rule): say "You speak the chant in clear tones. Initially, you feel no different. And then, strangely, your back feels better than it has in years, and your step seems lighter!" At the time when gravity-resistance wears off: now the player is not gravity-resistant; say "Your feet feel heavy again." Section - Fiznav (fiznav_spell) There is a spell called fiznav. The effect of fiznav is "make boat sea-worthy". Understand "fiznav" as fiznav. After casting fiznav at a person (this is the creatures aren't boats rule): say "Your chant goes unanswered. It's not intended for living creatures." After casting fiznav at something (this is the fiznav is for boats only rule): say "Your chant goes unanswered. It's intended for boats apparently." Section - Foblub (foblub_spell) There is a spell called foblub. The effect of foblub is "deliver magnificent sermon (glue audience to seats)". Understand "foblub" as foblub. Casting foblub at something is sermonizing. [see "Mountain Peak for why this is defined] [Note that because the message implies no casting attempt, the following is an instead rule, so no casting attempt will occur.] Instead of casting foblub at the player (this is the self-absorption isn't priestly rule): say "Well, I know you like listening to yourself, but isn't this a bit much?" After casting foblub (this is the untargeted foblub does nothing rule): indicate a lack of audience. [See "Espnis" section for definition of this phrase.] After casting foblub at something that is not a person (this is the dead matter can't be swayed rule): indicate a lack of audience. [See "Espnis" section for definition of this phrase.] After casting foblub at a person (this is the just because you preach doesn't mean they'll listen rule): [IMPDO - expand number of sermon topics?] say "You give a wonderful sermon about how one's future affects one's past, but no one seems to be listening." Section - Gloth (gloth_spell) There is a spell called gloth. The effect of gloth is "fold dough 83 times". Understand "gloth" as gloth. After casting gloth at a person (this is the unfortunately the Pillsbury doughboy cannot be expected to make an appearance rule): say "Nothing happens. When you see a living creature made out of dough around here, let me know." After casting gloth at something (this is the most things are not dough rule): say "The chant fails. [one of]I suppose you probably need[or]It must require[stopping] actual dough for it to work." Section - Huncho (huncho_spell) There is a spell called huncho. The effect of huncho is "send object to higher plane". Understand "huncho" as huncho. After casting huncho (this is the untargeted huncho does nothing rule): say "You see a brief flash of light, but nothing happens." [Note the change in the message as compared to the original, in order to provide some minimum hinting about the intended use of the spell while in Atrii.] To deny planar upshift of the player: say "You finish the chant. There is a short-lived flash of light above[if the location is not in Aetherium], but nothing else[else] accompanied by a slight upward tug in its direction[end if]." After casting huncho at the player (this is the huncho is not for escaping things rule): deny planar upshift of the player. After casting huncho at a portable thing that encloses the player (this is the no heaven for houdinis rule): deny planar upshift of the player. After casting huncho at a person (this is the can't just go around launching creatures to higher planes rule): say "You feel a slight rumbling overhead, but nothing else happens." [Note that the original source code checked both the I6 'static' and the I6 'scenery' attributes, but this implementation only checks if the target is "portable" (i.e. the opposite of "fixed in place," which is the direct equivalent of the I6 'static' attribute), since in 6G60 giving something the "scenery" property automatically gives it the "fixed in place" property. (Doing unexpected things, like declaring a scenery thing to be "portable" and then modifying or unlisting the "can't take scenery rule" in the Standard Rules, would theoretically allow something scenery to be hunchoed, so don't say you weren't warned. Also note that the original logic checked whether the item in question was worn and set its I6 'worn' attribute to false if it was. This is not necessary in I7 since wearing is handled by the wearing relation, and this relation is apparently updated automatically when the worn thing is moved elsewhere. Finally note that the location to which the object is sent varies randomly, because it seems unintuitive that everything would land in one pile.] To shift (X - a thing) to a higher plane: if X is unhandled: now X is handled; [initial appearances often mention original location] now X is in a random room in Aetherium. After casting huncho at something (this is the oh man does this invite world-model abuse rule): if the second noun is portable and the second noun is not a person and the location is not in Aetherium: shift the second noun to a higher plane; say "There is a flash of light, and [the second noun] abruptly vanish[es]!"; otherwise: say "[one of]As you finish the chant, a[or]A[stopping]n aurora of light emerges above [the second noun] for the briefest moment, then dwindles away." Definition: a thing is unembodied rather than embodied if a random thing incorporating it is nothing. To decide which thing is the ultimate whole of (X - a thing): let greater whole be X; while a random thing that incorporates greater whole is not nothing: now greater whole is a random thing that incorporates greater whole; if greater whole is X: decide on X; otherwise: decide on greater whole. Instead of casting huncho at an embodied thing (called targeted part) (this is the can't send parts to a higher plane rule): try casting huncho at the ultimate whole of targeted part instead. Section - Ledak (ledak_spell) [Note that the logic for this spell is altered from that found in the original, to handle cases where multiple "forgeries" are in the location. The original source logic would only react to a single object, and experimentation with release 3/960606 shows that casting it without a target would not always trigger the detection/destruction of fakes (e.g. the scriptures) -- presumably because I6 'Before()' routines are used instead of 'React_Before()' routines. This means that certain new properties are given to all things, and set to certain values for forgery items. The approach is somewhat complicated by the fact that there does not appear to be a way to test whether something "provides" a property in the I6 parlance.] There is a spell called ledak. The effect of ledak is "detect forgery". Understand "ledak" as ledak. To describe the action of ledak on (fakery - a thing): if fakery provides the property ledak-interaction event: say the ledak-interaction event of the fakery with an extra line break; otherwise: say "[The fakery] [is-are] surrounded by a bright yellow glow, and [it-they] disintegrate[s]!" To seek and destroy (inauthentic item - a thing): if the inauthentic item is not ledak-resistant: remove the inauthentic item from play; describe the action of ledak on inauthentic item. Definition: A thing is ledak-special rather than ledak-basic if it provides the property ledak-interaction event or it is ledak-resistant. After casting ledak (this is the untargeted ledak seeks and destroys local forgeries rule): if exactly zero forged things are at hand: say "Nothing obvious happens. The area appears to be free of forgeries, at the moment."; otherwise: let ledak-basic targets be the list of forged ledak-basic at hand things that are not fake rods; let ledak-special targets be the list of forged ledak-special at hand things that are not fake rods; let targeted evil rods be the list of at hand fake rods; if the number of entries in ledak-special targets is greater than zero: repeat with targeted forgery running through ledak-special targets: seek and destroy targeted forgery; if the number of entries in ledak-basic targets is greater than zero: repeat with targeted forgery running through ledak-basic targets: remove targeted forgery from play; say "[if the number of entries in ledak-special targets is greater than zero][line break][end if]The [ledak-basic targets] [if the number of entries in ledak-basic targets is greater than one or entry one in ledak-basic targets is not singular-named]are[else]is[end if] surrounded by a bright yellow glow, and [if the number of entries in ledak-basic targets is greater than one or entry one in ledak-basic targets is not singular-named]they[else]it[end if] disintegrate[if the number of entries in ledak-basic targets is greater than one or entry one in ledak-basic targets is not singular-named][else]s[end if]!"; if the number of entries in targeted evil rods is greater than zero: say "[if the number of entries in ledak-special targets is greater than zero or the number of entries in ledak-basic targets is greater than zero][line break][end if]A yellow glow surrounds [the list of at hand fake rods], but, with a [if the number of at hand fake rods is greater than one]sizzling [end if]crackle of power, the light is snuffed out." After casting ledak at the player (this is the you the real deal dawg rule): say "You appear to be the genuine thing." After casting ledak at something that is authentic (this is the most things are not forgeries rule): say "[The second noun] appear[s] to be genuine." After casting ledak at something that is forged (this is the woe to forgeries when ledak arrives rule): seek and destroy the second noun. Section - Luncho (luncho_spell) There is a spell called luncho. The effect of luncho is "send object to lower plane". Understand "luncho" as luncho. After casting luncho (this is the untargeted luncho does nothing rule): say "You see a brief flash of smoke, but nothing happens." To deny planar downshift of the player: say "You finish the chant. There is a short-lived puff of smoke at your feet, but nothing else." After casting luncho at the player (this is the luncho is not for escaping things rule): deny planar downshift of the player. After casting luncho at a portable thing that encloses the player (this is the no hell for houdinis rule): deny planar downshift of the player. After casting luncho at a person (this is the can't just go around cramming creatures to lower planes rule): say "You feel a slight rumbling beneath your feet, but nothing else happens." [See the comments for the "Huncho" spell for reasons why certain property checks are not direct equivalents of what's seen in the original source code. Also, note that the location to which the object is sent varies randomly, because it seems unintuitive that everything would land in one pile. Additionally, note that the original source code specified that something lunchoed in Hades would end up in location MON_Chapel2 (see "Monastery Chapel"), which has the unpleasant semantic and theological implications that normal reality is on a lower plane than Hades, while simultaneously Hades is lower than it. Since other rules forbid the casting of spells in Hades, anyway, this logic is omitted. Finally, note that in release 3/960606 it is possible to recover items from Hades by picking them up -- an allowed action in location Hades_5. Given the way that it is strongly implied that the player has no material body with which to manipulate items, this implementation does not allow that. However, any items caught in Hades by this change will be automatically "resurrected" along with the player character -- see section "Flaming Sphere".] After casting luncho at something (this is the exciting new methods of world-model abuse rule): if the second noun is portable and the second noun is not a person and the location is not in Fiery Realm: if the second noun is unhandled: now the second noun is handled; [initial appearances often mention original location] now the second noun is in a random room in Fiery Realm; say "There is a puff of smoke, and [the second noun] disappear[s]!"; otherwise: say "[one of]As you finish the chant, a[or]A[stopping] miasma of smoke collects at the base of [the second noun] for the briefest moment, then drifts away." Instead of casting luncho at an embodied thing (called targeted part) (this is the can't send parts to a lower plane rule): try casting luncho at the ultimate whole of targeted part instead. Section - Shazok (shazok_spell) [Note that some of the logic in this object's 'magic()' routine has been moved to the rules for the storm. See that section for in the chapter "Forest Edge" for details.] There is a spell called shazok. The effect of shazok is "call lightning from storm". Understand "shazok" as shazok. After casting shazok (this is the shazok must target something rule): say "You speak the chant. In the absence of a storm, nothing seems to happen." After casting shazok at something (this is the shazok only works on storms rule): say "Your chant goes unanswered. You need a genuine natural storm, I suppose." Section - Swanko (swanko_spell) [Note that the function of this spell is modified from the original to auto-target spirits if cast without a target while one is nearby. See the section on the "Spirit" kind for the actual banishment rules.] There is a spell called swanko. The effect of swanko is "banish spirit". Understand "swanko" as swanko. Instead of casting swanko when a spirit (called outsider) is at hand (this is the interpret untargeted swanko as intended for spirits in the location rule): try casting swanko at outsider instead. After casting swanko (this is the swanko banishes spirits but only when they're around rule): say "You finish the chant. The general vicinity seems pretty free of spirits now." After casting swanko at something that is not a spirit (this is the swanko has no effect on mundane matter rule): say "The chant, looking for a locus of spiritual energy to disrupt, fails." Section - Taclor (taclor_spell) There is a spell called taclor. The effect of taclor is "heal wounds". Understand "taclor" as taclor. [Note the slight change in the wording of following message to prevent implying that the chant will seek out a target automatically.] Instead of casting taclor at something incorporated by a person (this is the interpret casting taclor at a part of someone as casting taclor at that person rule): try casting taclor at the ultimate whole of the second noun instead. After casting taclor (this is the untargeted taclor does nothing rule): say "The chant, not directed at a living creature, and fails." After casting taclor at the player (this is the taclor is way better than band-aids rule): now the current hit points of the player is the maximum hit points of the player; say "You speak the chant, and feel a warm glow surround you. In moments, you feel physically renewed!" After casting taclor at a person (this is the taclor doesn't have much effect on random creatures rule): say "[The second noun] [is-are] no doubt grateful for the gift of better health." After casting taclor at something (this is the taclor can't heal inanimate things rule): say "It's apparently beyond your powers to heal [the second noun]." Section - Throck (throck_spell) There is a spell called throck. The effect of throck is "grow plant". Understand "throck" as throck. [Note that the following is an instead rule, so no casting attempt will occur.] Instead of casting throck (this is the throck must have a target rule): say "You hesitate. The throck chant has been known to turn one's thumb green if it's not directed at a target." After casting throck at something that is not vegetable-like (this is the throck does nothing to non-plants rule): say "Your chant goes unanswered. It's intended for plants only." After casting throck at something that is vegetable-like (this is the throck is less useful than you might expect for most plants rule): say "[The second noun] grow[s] nearly imperceptibly. Perhaps [subject pronoun of second noun] [is-are] already as big as [subject pronoun of second noun] can get." Section - Tossio (tossio_spell) [Note that some of the original source code's logic, found in this object's 'magic()' routine, has been relocated to rules concerning the granite wall. See "Workroom" chapter.] There is a spell called tossio. The effect of tossio is "turn granite into pasta". Understand "tossio" as tossio. After casting tossio (this is the untargeted tossio does nothing rule): say "You complete the chant, but nothing happens. Perhaps you need to direct it at something?" After casting tossio at something (this is the tossio won't work on non-granite things rule): say "Your chant goes unanswered. I guess you need pure granite." Section - Trohsme [Note that this spell is not found in Mr. Yu's original. It is clumsily grafted into the magic system, which is rendered inconsistent by not being able to cast simple spells directly from their scrolls. Fortunately, this is presumably something most players would not want to do.] There is a complex spell called trohsme. The effect of trohsme is "bypass troublesome maze". Understand "trohsme" as trohsme. Yu's revenge is a truth state that varies. Yu's revenge is false. After casting trohsme (this is the untargeted trohsme usually does nothing rule): say "Nothing happens. I guess your present location doesn't count as a troublesome maze." After casting trohsme at something (this is the trohsme won't work on non-mazes rule): say "Nothing happens. [The second noun] [if the second noun is singular-named]isn't[else]aren't[end if] really much of a troublesome maze, it would seem." Section - Wigro (wigro_spell) There is a spell called wigro. The effect of wigro is "turn undead". Understand "wigro" as wigro. To indicate lack of turning: say "You speak the chant. Nothing seems to happen." After casting wigro (this is the untargeted wigro does nothing rule): indicate lack of turning. After casting wigro at something (this is the most things don't count as undead rule): indicate lack of turning. Section - Zemdor (zemdor_spell) [Note that some of the logic found in this object's 'magic()' routine in the original source code has been relocated to the definition of the coin kind in this implementation. See that section for details. Also note that this object made use of the I6 'general' attribute to track whether or not it had already been used to copy coins. This implementation uses the more descriptive name "forbidden for money" in the same manner. Finally, note that the original source code specified a response if the player tried to cast it at a spell ("This violates certain unwritten laws of magic."), but, because in this implementation spells are not treated as material things and should not be targetable in the first place, the corresponding logic is omitted here.] There is a spell called zemdor. Zemdor can be forbidden for money. The effect of zemdor is "triplicate object". Understand "zemdor" as zemdor. After casting zemdor (this is the untargeted zemdor does nothing rule): say "The chant, seeking a locus for triplication, fails." After casting zemdor at a person (this is the zemdor doesn't work on creatures rule): say "The chant, not designed for living creatures, fails." After casting zemdor at something (this is the zemdor is way to useful to be functional very often rule): say "[The second noun] shimmer[s] and wavers in your sight. [one of]You blink in disbelief as [it-they] seem[s] to split into three copies of [reflexive pronoun of the second noun]! [or][It-they] split[s] into three separate, faded images of [reflexive pronoun of the second noun]. [stopping]However, as you finish the chant, the mystic energy fades, and the images coalesce back into one unchanged object[first time]. The chant fails[only]." Volume - Game Universe Part - Notes on Global Variables Found In Original [Note that the original source code specified two global variables, 'in_hades' and 'in_atrii,' that were set when the player was in those areas. Logic sensitive to the state of those variables is handled via I7 regions in this implementation, so you will find no direct equivalent to them. Similarly, the original source code declares a global variable called 'has_resist_gravity'-- see the chapter called "Gravity Resistance" in the "PC Parameters" part for its equivalent. There is also a global variable called 'spell_block' used to regulate whether spells can be cast or not, regardless of other conditions. The equivalent can be found in the section on the "Casting / Casting It At" verb. There is also a global array defined called 'all_my_spells', used to store the spells recorded in the spell book. There is no direct equivalent here, see the "Cataloguing" relation instead. Finally, there is also a global called 'the_spell_was', which is omitted because it did not seem to be needed. See the section on "Casting / Casting It At" under "New Actions" for details.] Part - PC Parameters Chapter - Description The description of the player is "You are a simple monk of the Order. Anything further than that would be vanity." Chapter - Starting Location The player is in Monastery Chapel. Chapter - Inventory Visibility The player is open-inventoried. Chapter - Carrying Capacity (MAX_CARRIED) The carrying capacity of the player is 15. Chapter - Player Hit Points Section - Maximum Hit Points (Player_HP_MAX) [The handling of maximum hit points in the version of the source code I received is unintuitive. There is a comment when the global variable Player_HP_MAX is declared that it "should" be a starting value of 20 plus the current score. However, the only place this value is ever changed in the code is in the PraySub routine, executed in response to the "pray" command. Since the pray verb has no other effect in the game (other than a 1% chance of spontaneously healing the PC), it doesn't seem likely that many players would discover that frequent prayer is useful. Also, current hit points are not increased when maximum hit points are, with the unintuitive result that praying can seem to have caused damage since the numeric values are not made explicit. The implementation path here tries to split the difference: After praying at least once, the every turn rule is activated that will automatically increase max hit points with score from that point on. Also, current hit points are adjusted upward by the same amount.] The player has a number called maximum hit points. The maximum hit points of the player is 20. [Note that this can be increased during normal play, see below.] The player has a number called initial hit point limit. When play begins (this is the set initial hit point limit from maximum hit points rule): now the initial hit point limit of the player is the maximum hit points of the player. Every turn when we have prayed (this is the perfunctory piety reduces combat anxiety rule): let max HP target be the initial hit point limit of the player plus the score; let HP bonus be max HP target minus the maximum hit points of the player; if HP bonus is at least 1: increase the maximum hit points of the player by HP bonus; increase the current hit points of the player by HP bonus. Section - Current Hit Points (Player_HP_CUR) The player has a number called current hit points. The current hit points of the player is 20. Chapter - Player Resurrections Remaining (Player_Lives_Left) [Note that the name of this property has been given the more accurate name of "resurrections remaining" in this implementation, since the code controls how many times the player can be revived, and they effectively have one additional "life" over the value set.] The player has a number called resurrections remaining. The resurrections remaining of the player is 3. Chapter - Gravity Resistance (has_resist_gravity) [Note that the intent of this property is to emulate the logic around the 'has_resist_gravity' global variable in the original source code. Since the game logic and messages imply that the applicable chant (feeyuk) can only ever be usefully directed at the player, this is made a property of the player object. Note the need to refer to the player object awkwardly as "yourself," since declaring "The player can be gravity-resistant." causes what looks like a spurious compiler error.] Yourself can be gravity-resistant. Chapter - Short-Term Retention (memory) [Note that, in this implementation, much of the logic associated with this object in the original source code has been migrated to the "enumerating memorized spells" and "learning" actions.] A thing called your short-term retention is part of yourself. The short-term retention has a number called maximum spell count. The maximum spell count of the short-term retention is 5. The short-term retention has a number called initial spell count limit. [set by "when play begins rule", see below] Understand "memory" as the short-term retention. The short-term retention recalls gnusto. [PC knows this spell from the start.] To bring (S - a spell) into memory anew: now S is remembered by the short-term retention; now the memorization count of S is zero. To add (S - a spell) to memory: if S is permanently-learned: do nothing; otherwise: if the short-term retention does not recall S: bring S into memory anew; increment the memorization count of S. To eject (S - a spell) from memory: now S is not remembered by the short-term retention. To remove (S - a spell) from memory: if S is permanently-learned: do nothing; otherwise: decrement the memorization count of S; if the memorization count of S is less than 1: eject S from memory. Instead of examining the short-term retention (this is the interpret examining the short-term retention as enumerating memorized spells rule): try enumerating learned spells instead. [Following rule is to let other author's change the maximum spell count without having to deal with a hardcoded maximum spell count value in the "every turn" rule.] When play begins (this is the set initial spell count limit from maximum spell count rule): now the initial spell count limit of the short-term retention is the maximum spell count of the short-term retention. Every turn when we have prayed (this is the perfunctory piety improves recall reliability rule): let score bonus be the score divided by 40; [will be rounded down per integer math rules] let max spell target be score bonus plus the initial spell count limit of the short-term retention; if max spell target is greater than the maximum spell count of the short-term retention: now the maximum spell count of the short-term retention is max spell target. Chapter - Prayer Book [Note that the original source code specifies "my" as a synonym in the object's 'name' property, but I7 understands the word "my" already. Also note that this object's 'magic' property was defined as the array 'all_my_spells' in the original source code. The relationship between spellbooks and spells is handled via a new relation here, called "Cataloguing". Finally, note that the "title" property here is used instead of the I6 'description' property as part of some changes to the way spellbooks are implemented. See the "Spellbook" section under "New Kinds" for details.] The player carries a spellbook called a prayer book. The title of the prayer book is "Mystical Chants". The indefinite article of the prayer book is "your". The prayer book records gnusto and frotz. After dropping the prayer book (this is the your book is heavy rule): say "The heavy [prayer book] lands with a substantial 'whump!'" After putting the prayer book on a fixed in place supporter (this is the your book is heavy on supporters rule): say "[The prayer book] lands atop [the second noun] with a distinct 'thud.'" Part - Roving NPCs Chapter - Morgan the Ranger (Morgan) [Note: The object had a 'number' property in original code, but its uses seem to treat it as a binary state flag. It is replaced with the more descriptive 'presenting a conundrum' flag. Also note that, as Morgan is not given the I6 'transparent' attribute in the original source code, she is not given the "open-inventoried" property here.] Morgan the Ranger is an open-inventoried woman. "[if Morgan is in Delbin's pub]There's a warrior-maiden sitting at the bar, her eyes riveted to the glass of ale[otherwise]Morgan the Ranger is here[end if]." The description of Morgan is "She's nearly twice your height, and probably twice your strength too. She's armed and armored in [typical military gear]. She gives you the impression of being the type who'd hunt dragons as a hobby -- assuming there were any dragons left to hunt, of course." Understand "warrior" or "captain" or "maiden" as Morgan. Morgan can be presenting a conundrum. Morgan wears an unimportant thing called a suit of armor. Morgan carries an unimportant mass-nouned thing called some typical military gear. Morgan wears an unimportant container called a scabbard. An unimportant thing called a huge broadsword is in the scabbard. Understand "sword" as the huge broadsword. Instead of throwing something at Morgan (this is the Morgan is not a good missile target rule): dissuade the player from attacking Morgan. Instead of attacking Morgan (this is the attacking Morgan is not wise rule): dissuade the player from attacking Morgan. To dissuade the player from attacking Morgan: say "She's well-armed and probably dangerous." Instead of showing or giving something to Morgan (this is the Morgan is not interested in material goods rule): say "A gracious gesture, perhaps, but she isn't interested." Instead of kissing Morgan (this is the Morgan enforces celibacy vows rule): say "She nearly splits your skull with the flat of a huge broadsword before you even get close. 'For a man of the cloth, you've got a lot of nerve,' she says." Morgan recognizes Frobar, The Thief, and the white dragon. Instead of querying Morgan about Frobar (this is the Morgan doesn't think much of Frobar rule): say "She laughs. 'You've never heard of Frobar, the dullest Enchanter? The Enchanter who was so dull that his fellow wizards forgot to invite him to the last great meeting? This saved him from becoming an amphibian, so perhaps dullness has its virtues.'"; if Frobar is at hand, say "[line break]The wizard looks rather insulted. 'Oh hush up, Morgan,' he says." Instead of querying Morgan about The Thief (this is the Morgan knows little about the thief rule): say "She smiles. 'I can't say as I know much about "; if The Thief is at hand: say "this fellow over here,' she says and gives the gentleman a whack on the back that nearly knocks his teeth out. 'But I hear he's something of a thief.'[paragraph break]'Nothing of the sort!' the gentleman protests."; otherwise: say "that thief fellow. I've been told he has a hideout somewhere, nearly impossible to find.'" Instead of querying Morgan about Morgan (this is the Morgan is not a boaster rule): say "Morgan shakes her head. 'Talk of myself is boring, Priest.'" Instead of querying Morgan about a windcat (this is the treat querying about a windcat as asking about windcats generally rule): try asking Morgan about "windcats" instead. Instead of asking Morgan about "cats/windcats" when Morgan is presenting a conundrum (this is the Morgan forgot to explain the cat markings rule): say "'Right, the windcats. The speckled cat will find the lieutenant to the east. The spotted cat will find the lieutenant to the west." Instead of asking Morgan about "kobold/kobolds/war/battle/conflict" (this is the Morgan knows war is not the answer rule): say "'The war wages on, priest, even though the battle was lost long ago, and there were no winners, kobold or man.'" Instead of querying Morgan about the white dragon (this is the treat querying Morgan about the dragon as asking about hunting rule): try asking Morgan about "hunting" instead. Instead of asking Morgan about "dragon/dragons/hunting" (this is the Morgan knows something about hunting dragons rule): say "Morgan becomes momentarily thoughtful. 'Some of the best dragon-hunting I ever did was up in Frostham long ago. Those white frost dragons are quite a vicious lot. Best not to wake a sleeping white dragon unless you have a weapon handy and know how to use it!'" Instead of asking Morgan about something (this is the generic asking Morgan response rule): say "'Sorry, I'm not sure about that.'" This is the Morgan the Ranger default life behavior rule: say "Morgan the Ranger appears to be thinking important thoughts at the moment." Instead of doing something when the current action is generic life behavior and the current action involves Morgan the Ranger (this is the Morgan the Ranger generic life rule): abide by the Morgan the Ranger default life behavior rule. Persuasion rule for asking Morgan the Ranger to try doing something (this is the reroute understood orders to Morgan to generic life response rule): consider the Morgan the Ranger default life behavior rule; rule fails. After greeting Morgan the Ranger (this is the Morgan is the only one who notices seeing the PC twice rule): say "'Hello[if Morgan the Ranger is presenting a conundrum] again[end if], priest.'" After casting a spell at Morgan (this is the can't use magic on Morgan rule): say "The chant has no effect. 'What's that you're mumbling there priest?' asks Morgan, eyeing you suspiciously." Every turn when Morgan is in Ravine Pass and Morgan the Ranger is at hand and Morgan is not presenting a conundrum (this is the Morgan offers a stereotypical logic puzzle rule): now Morgan is presenting a conundrum; say "The Ranger sees you approach and recognizes you. 'Well met again, Priest. I have need of your assistance to end the kobold border war that has been going on far too long.' She pauses.[paragraph break]'To the west and east are two of my lieutenants and their soldiers, cut off from the rest of us by previous kobold raids. I have the power to end this war and call a truce, but to do so, I need to inform both of my lieutenants to stop fighting via windcat message carriers.' She points to the two windcats in the wicker cage and the pile of colored flags. 'A red flag indicates [']attack['], the blue, [']truce.['][paragraph break]'When my lieutenants receive the instructions, they will verify my commands by sending additional messengers with [']attack['] or [']truce['] instructions to each other. Based on the two received messages, each lieutenant will act accordingly.'[paragraph break]She slaps you on the back, jolting you to attention. 'Herein lies my problem, Priest. I know for a fact, that one of my lieutenants is a traitor, who will disobey my orders. Any instruction I send to the traitor, the opposite will be sent by the traitor to my remaining good lieutenant. The traitor will also take the two orders he receives and do the opposite, if there is a majority, or attack outright, if there are messages of both 'truce' and 'attack'.[paragraph break]'Thankfully, my good lieutenant will faithfully copy my instructions to the other lieutenant, and will follow orders received, if there is a majority, or follow a [']truce['] if there are mixed messages.[paragraph break]'My greatest problem, Priest, is that I do not know which lieutenant is the traitor! If you can bring peace once and for all to Southern Egreth, many will remember your good deeds.'". Chapter - Frobar (Frobar) [Note that, as Frobar is not given the I6 'transparent' attribute in the original source code, he is not given the "open-inventoried" property here. Also note that Frobar is the only "wandering" NPC in the whole of release 3/960606, behavior driven by an I6 'daemon()' routine attached to the object. This implementation uses an "every turn" rule for the same purpose, but the relevant original I6 source code is included at the end of this section for comparison purposes. A "perambulatory" property is created for Frobar that is tested in the every turn rule, as a convenience should it be desirable to turn his mobility on or off.] Frobar is a man. "[if Frobar is in Delbin's Pub]There's an old wizard sitting at the bar, his eyes riveted to the glass of ale[else]Frobar the Enchanter is here[end if]." Frobar can be perambulatory. The description of Frobar is "A wizardly old figure of a man." Understand "wizard" or "sorcerer" or "enchanter" as Frobar. Frobar wears an unimportant thing called some robes. An unimportant container called some pockets are part of the robes. Understand "pocket" as the pockets. Instead of throwing something at Frobar (this is the Frobar is not a good missile target rule): dissuade the player from attacking Frobar. Instead of attacking Frobar (this is the attacking Frobar is not bright rule): dissuade the player from attacking Frobar. To dissuade the player from attacking Frobar: say "You make a threatening move., but the wizard practically yawns. 'Just what the world needs, another violent Priest.'[paragraph break]You stop, somewhat embarrassed." Instead of asking Frobar about something when Frobar is in Delbin's Pub (this is the wizard is too preoccupied for questions during beer standoff rule): indicate Frobar's preoccupation. [This next rule added for compatibility with the "querying it about" action.] Instead of querying Frobar about something when Frobar is in Delbin's Pub (this is the wizard is too preoccupied for queries during beer standoff rule): indicate Frobar's preoccupation. Instead of showing something to Frobar when Frobar is in Delbin's Pub (this is the wizard is too distracted to see what you're showing during beer standoff rule): indicate Frobar's preoccupation. To indicate Frobar's preoccupation: say "The wizard is somewhat occupied at the moment." Frobar recognizes Morgan and The Thief. Instead of asking Frobar about "magic/mystic" (this is the Frobar's opinion about magic rule): say "Frobar scowls. 'Magic? We've seen the last of magic, let me tell you. Does anyone remember what it did for us? Does anyone mention the Enchanters that saved Quendor from certain ruin many a time? Of course not. A bunch of ingrates[if Frobar bears the term paper]. I just hope they're teaching the kids at Tech what magic was all about, before we got all this new 'science' stuff everyone's always blabbering about[end if].'" Instead of asking Frobar about "golem/golems" (this is the Frobar knows about golems rule): say "Frobar sighs. 'Golems used to be useful, you know. But now, without magic to control them, they go off and get into all sorts of mischief.'" [The following rule would normally be handled with a rule for the "querying it about" action, but doing so would cause the parser to try to disambiguate among the three golems if the player command is ">ASK FROBAR ABOUT GOLEM". This is undesirable behavior, so the following rule allows players to about a specific type of golem and receive a sensible answer.] Instead of asking Frobar about "wood/stone/iron golem" (this is the treat asking about a specific type of golem as asking about golems in general rule): try asking Frobar about "golems" instead. Instead of querying Frobar about The Thief (this is the Frobar's opinion of the thief rule): say "'We've had some dealings with in the past. Not a bad chap, but he does like to supplement his income, if you know what I mean. Far too risky a profession for my taste.'" Instead of querying Frobar about Morgan (this is the Frobar's opinion about Morgan rule): say "'Morgan Grueslayer, top military Ranger in her graduating class, I hear. If she asks you to join her on one of her campaigns, just walk away. All that fighting... too stressful if you ask me.'" Instead of asking Frobar about "barsap/snaboz/Zork" (this is the Frobar doesn't like to reminisce rule): say "'Don't even get me started.'" [Note: The original code offered a slightly different wording for the giving action, but it did not seem significant and the result was the same. The two functions are merged here.] Instead of showing or giving the copy of Enchanter Monthly to Frobar (this is the Frobar recognizes his own mail rule): now Frobar carries the copy of Enchanter Monthly; say "Frobar snatches the magazine out of your hands. 'What are you doing with my mail?' he says, irritated." Instead of showing a scroll to Frobar (this is the Frobar is not interested in scrolls rule): say "'A magic scroll, eh? Doesn't do me a lot of good these days.'" Instead of showing something to Frobar when the noun is a rod or the noun is a sphere (this is the Frobar knows about rods and spheres rule): say "Frobar looks at [the noun] for a moment. 'Something more than meets the eye here. Couldn't tell you what, though.'" Instead of showing the research paper to Frobar (this is the Frobar can be sarcastic rule): say "'So, you're a carpenter too?' Frobar says, somewhat sarcastically." Instead of showing something to Frobar (this is the Frobar general response to being shown things rule): say "'Hmm. Not very interesting.'" Instead of showing or giving the term paper to Frobar when Frobar is not in Delbin's Pub and Frobar carries the glossy scroll (this is the Frobar gets paper rule): deliver Frobar's legacy To deliver Frobar's legacy: now Frobar carries the term paper; now the player carries the glossy scroll; accomplish gift-of-the-mad-guy; say "Frobar glances over the term paper and his eyes widen. 'Wilbur -- why, that's my great nephew!' He takes the paper and reads.[paragraph break]'So true, so true,' he mumbles and smiles. 'A fine boy, perhaps he'll become a great man someday, if he stops skipping class. He reminds me of my days at Tech -- all filled with dreams and hopes.'[paragraph break]He pauses, and searches his pockets. 'I even perfected a spell, did you know? Good old loyal, boring Frobar perfected a spell, and, if it hadn't been for that Snaboz show-off who had to go and perfect the izyuk spell, I might have even tried to publish mine.'[paragraph break]He finds a scroll amongst his robes and hands it to you. 'You don't believe me? Here, see for yourself.'" Instead of showing or giving the term paper to Frobar when Frobar is in Delbin's Pub (this is the Frobar wants the beer before the term paper rule): say "The wizard pushes your offering aside. 'I'm somewhat busy at the moment,' he says, his eyes glued to the glass of ale." Instead of giving something to Frobar (this is the Frobar is not interested in receiving much rule): say "'No, thank you.'" This is the Frobar default life behavior rule: say "'I'm rather busy at the moment.'" Instead of doing something when the current action is generic life behavior and the current action involves Frobar (this is the Frobar generic life rule): abide by the Frobar default life behavior rule. Persuasion rule for asking Frobar to try doing something (this is the reroute understood orders to Frobar to generic life response rule): consider the Frobar default life behavior rule; rule fails. After yawning when Frobar is at hand (this is the Frobar does not like yawners rule): say "'Stop that!' Frobar says, 'It's contagious.'" [Note that the original source code does not provide any special response for spell-casting on Frobar, but it seems consistent that he should have one given that the other two major NPCs (Morgan and The Thief) do.] After casting a spell at Frobar (this is the Frobar and magic have parted ways rule): say "Although you speak the chant carefully, its energy evaporates as it reaches the wizard. Frobar raises an eyebrow at you. 'Not bad,' he says drily, 'for an amateur.'" After greeting Frobar (this is the Frobar's unenthusiastic greeting rule): say "The wizard nods. 'Hello, hello, and all that rubbish.'" Every turn when Frobar is at hand and the player is in the large bed (this is the Frobar doesn't like people in his bed rule): say "Frobar seems annoyed. 'Get out of my bed!' he snaps, and drags you to your feet. "; [Note: original code executed the following command, though it seems like the output would be a little odd.] try the player exiting. [Note: the equivalent to the following rule in the original source code made the check 'random(3) < 3', which would be true 2/3 of the time. This seemed a little too frenetic, so the logic is revised to a 30% chance here. As an instructional note to the interested novice, the original version of this rule caused a bug that took me a while to track down. By using "rule succeeds" instead of "make no decision" to halt processing, this rule would short-circuit the processing of the every turn rulebook, causing the point award for getting the scroll from Frobar to be delayed. See WWI 18.10 for more details on this.] Every turn when Frobar is at hand (this is the Frobar miscellaneous housekeeping actions rule): if a random chance of 3 in 10 succeeds: if the large potted plant is at hand: say "Frobar tends to the plant."; make no decision; [make sure to stop processing this rule but continue rulebook] if large bed is at hand: say "Frobar arranges some quilts on the bed."; make no decision; [make sure to stop processing this rule but continue rulebook] if the large bookshelf is at hand: say "Frobar pulls a book off the shelves, glances through it, and puts it back."; make no decision; [make sure to stop processing this rule but continue rulebook] if Frobar is in Lounge and the holder of Frobar is a room: say "Frobar dusts the furniture a bit." [Note: the equivalent of the following rule in the original source code chose a random range of 1 to 5 for deciding which bit of business to do, a 60% chance of something occurring. As with the previous rule, this frequency is toned down in this implementation, in this case by adjusting the random selection range upward.] Every turn when Frobar is at hand and Frobar is in Wizard's Home and the holder of Frobar is a room (this is the wizards like to mutter to themselves rule): let i be a random number from 1 to 10; if i is: -- 1: say "Frobar mutters to himself, 'They didn't even invite me to the Last Enchanter's Guild Meeting.'"; -- 2: say "Frobar mutters to himself, 'Good old dependable Frobar. Bah!'"; -- 3: if Frobar carries the copy of Enchanter Monthly: say "Frobar leafs through a magazine he holds. 'What happened to Barsap? Hah! Did they ask me? No, of course not.'"; otherwise: say "Frobar checks his pockets. 'What did I do with this month's [']Enchanter Monthly[']?' he muses." Definition: A room is frobcessible if it is in Wizard's Home. Definition: A direction is frobile if the room it from the location of Frobar is a frobcessible room that is not the location of Frobar. Every turn when Frobar is perambulatory and Frobar is in Wizard's Home (this is the Frobar moves about when home rule): if a random chance of 1 in 3 succeeds: let mobility options be the list of frobile directions; let n be the number of entries in mobility options; if n is greater than zero: let i be a random number between 1 and n; let chosen direction be entry i of mobility options; [ say "(Frobar location = [location of Frobar], mobility options = [mobility options], chosen direction = [chosen direction])";] if the room chosen direction from the location of Frobar is in Wizard's Home: try Frobar going chosen direction; otherwise: [ say "(Frobar stuck in [location of Frobar], mobility options = [mobility options])";] do nothing. [This next rule is a much-stripped-down version of the 6G60 Standard Rule's "describe room gone into rule" ("Report an actor going..."), since Frobar's range is fairly limited.] Report Frobar going (this is the report Frobar's comings and goings rule): if the location is the room gone to: say "Frobar walks in from the [opposite of the noun]."; rule succeeds; [halt processing of report going rulebook] otherwise if the location is the room gone from: say "Frobar walks off to the [noun]."; rule succeeds; [halt processing of report going rulebook] otherwise: do nothing. [KEEP - daemon routine for Frobar object in original source code daemon [ i j k Mdest Mdir; ! This daemon will only deal with NPC movement... ! (no doors either) if (random(3) ~= 1) rfalse; ! doesn't always immed. move ! Count the available exits quickly objectloop(i in Compass) if (ZRegion(parent(self).(i.door_dir)) == 1) k ++; if (k == 0) rtrue; ! no exits... ! Pick a place to move to. ! In Frobar's case, most of the time he only has one exit. ! Also, we can block the sw exit of home here. if (parent(self) == FROBAR_Foyer) { Mdir = n_obj; Mdest = FROBAR_Parlor; MovePrintNPC(Frobar,Mdest,Mdir); rtrue; } ! Pick an exit at random and attempt to travel that way j = random(k); k = 0; objectloop(i in Compass) { if (ZRegion(parent(self).(i.door_dir)) == 1) { k ++; if (k == j) { Mdir = i; Mdest = parent(self).(i.door_dir); MovePrintNPC(Frobar,Mdest,Mdir); rtrue; } } } ] ] [Note that the following routine is found in SPECIAL.INF in the original source code; it is relocated here for convenience of reference.] [KEEP - MovePrint routine from original source code [ MovePrintNPC n dest dir; if (n in location) { print "^", (The) n, " walks off"; if (dir ~= in_obj or out_obj or u_obj && dir ~= d_obj) print " to the ", (DirectionName) dir.door_dir; print ".^"; } if (dest == 0) remove n; ! This seems odd - if dest bogus, 'unlink' NPC? else move n to dest; if (n in location) print "^", (The) n, " walks in.^"; ]; ] Section - Glossy Scroll (glossy_scroll) Frobar carries a scroll called a glossy scroll. The glossy scroll is inscribed with feeyuk. Chapter - The Thief (Thief) [Note: This object included a 'number' property in the original code, but its use is not observed anywhere in the provided source code, so it is omitted here.] The Thief is man. "[If The Thief is in Delbin's Pub]There's a gentleman dressed in black sitting at the bar, his eyes riveted to the glass of ale[else]A gentleman casually leans against one of the walls here[end if]." The description of The Thief is "A lean and crafty-looking individual, dressed mostly in black. He seems a bit too scruffy to be a nobleman, but also a bit too distinguished to be a common thug. Probably a thief, I'd guess." Understand "gentleman" or "character" as The Thief. The Thief wears some unimportant things called some black clothes. Instead of throwing something at The Thief (this is the Thief is not a good missile target rule): dissuade the player from attacking The Thief. Instead of attacking The Thief (this is the attacking The Thief is not bright rule): dissuade the player from attacking The Thief. To dissuade the player from attacking The Thief: say "You make a threatening move, but the thief seems to move twice as fast! You find yourself looking at the sharp end of a stiletto.[paragraph break]'I'm too much of a gentleman to harm a Priest,' the thief says, 'so don't force me to make an exception.'" The Thief recognizes the magistrate, the priceless painting, Morgan, and Frobar. Instead of querying the thief about the magistrate (this is the Thief knows the magistrate rule): say "The thief gives you a knowing nod. 'The Aragain magistrate? A honorless cur, if I ever saw one.'" Instead of querying the thief about the priceless painting (this is the Thief is just casually interested in art you understand rule): say "The thief shrugs. 'I hear there's a nice new painting on exhibit at the royal museum. You might want to check it out.'" Instead of asking thief about "lock/locks" (this is the Thief wouldn't know a lock from a larceny rule): create an expectant pause with the Thief asking the Thief's challenge about locksmithing; say "The thief shrugs. 'Do I look like a locksmith?'" The Thief's challenge about locksmithing is a binary reply. The positive rejoinder of the Thief's challenge about locksmithing is "The Thief looks at you sharply. 'Sorry,' he says, 'Not my line.'" The negative rejoinder of the Thief's challenge about locksmithing is "The Thief gives you a brief, disdainful look." [Although the original source code did not specify any specific responses for the other major NPCs, this implementation adds some for symmetry with the behavior of Frobar and Morgan.] Instead of querying the Thief about Morgan the Ranger (this is the Thief's opinion of Morgan rule): say "'Her methods are a bit -- shall we say, [']direct['] -- for my tastes,' the gentleman muses. 'Still, she's saved my skin nearly as often as I've saved hers.'" Instead of querying the Thief about Frobar (this is the Thief's opinion of Frobar rule): say "The gentleman clucks ruefully[if Frobar is at hand] and throws a pitying glance at the wizard[end if]. 'He just hasn't been the same lately... Got the rug yanked out from under his whole life, didn't he? He's doing rather better than I would have expected, under the circumstances.'" Definition: A thing is thief-valued if it is the champion's trophy or it is a coin. Instead of giving something to The Thief when the noun is thief-valued (this is the Thief's old habits die hard rule): now The Thief carries the noun; say "Confused, the thief pockets your offering. 'Quite generous of you, sir.' he says." This is the Thief default life behavior rule: say "The gentleman glances at you with dark, suspicious eyes." Instead of doing something when the current action is generic life behavior and the current action involves The Thief (this is the Thief generic life rule): abide by the Thief default life behavior rule. Persuasion rule for asking the Thief to try doing something (this is the reroute understood orders to Thief to generic life response rule): consider the Thief default life behavior rule; rule fails. After greeting the Thief (this is the a terse nod is better than a slit throat rule): say "The gentleman gives a sharp nod in your direction." This is the Thief's magic immunity rule: say "You speak the chant perfectly, but nothing seems to happen. The gentleman smiles and pats his dark cloak, which glows briefly with mystical energy before fading back to its normal fuligin hue."; rule succeeds. [success condition because it is intended to be used in after rules] After casting a spell at The Thief while the Thief wears the dark cloak (this is the Thief is immune to magic while wearing the dark cloak rule): abide by the Thief's magic immunity rule. Section - Dark Cloak (thief_cloak) The Thief wears a dark cloak. The description of the dark cloak is "A coal-black cloak, which blends into the surrounding shadows." After casting a spell at the dark cloak (this is the Thief's cloak is immune to magic rule): if the dark cloak is worn by the Thief: abide by the Thief's magic immunity rule; otherwise: say "With a flickering glow, the dark cloak absorbs the mystical energy of the chant, returning quickly to its uncannily black state." Section - Strange Door (magic_door) [Porting this object presents a bit of a challenge, because the original code implements this as a portable door, and such an object is not allowed in I7 6G60, where the standard rules assert that doors are always fixed in place. Although it is possible to force a generic thing to be enterable, this doesn't seem like a good idea. While it might seem reasonable to render it as an enterable lockable container with rules to try to simulate its door-ness, the messages associated with this object imply that it's not embedded in a doorway of its own and thus opening or closing it is somewhat nonsensical. As a result, it is rendered as a simple thing here, to be whisked off-stage once "deployed" in the game. In addition, a separate I7-compliant door is set up -- see "Thiefway" section of "Inside Skyscraper." Logic associated with the original version of this object's I6 'door_dir', 'door_to', 'found_in', and 'time_out' properties, plus its I6 'general' attribute has bee moved to the "Thiefway" door -- see "Inside Skyscraper" chapter.] A thing called a strange door is carried by The Thief. The description of the strange door is "[description of thiefway] Oddest of all is the fact that it isn't attached to anything!" The size of the strange door is 30. Understand "unattached" or "detached" or "free-standing" as the strange door. Instead of entering the strange door (this is the can't enter the strange door when it's not deployed rule): say "One enters doorway, not a door[first time] -- a subtle distinction[only]." To expostulate on when a door is not a door: say "You twist the door in the air[one of]. What is a door without its doorway? You spend a few moments reflecting on this koan[or]. Without a doorway to attach to, it's not terribly useful, it appears[stopping]." Instead of opening the strange door (this is the opening the strange door does little when it's not deployed rule): expostulate on when a door is not a door. Instead of closing the strange door (this is the closing the strange door does little when it's not deployed rule): expostulate on when a door is not a door. To link the thief's door to the wall: remove the strange door from play; now the thiefway is unlocked; now the thiefway is described. After dropping the strange door while the location is Inside Skyscraper (this is the eh close enough rule): link the thief's door to the wall; say "As you drop the door, it leaps off the ground and flies towards the eastern wall, embedding itself there. A doorway fades into existence around it." Rule for writing a paragraph about the strange door (this is the strange door I6 describe equivalent rule): say "There's an unattached door lying on the ground here." Part - Greater Anthar [ANTHAR.INF] Section - Downtown Anthar There is a region called Downtown Anthar. Instead of going nowhere in Downtown Anthar when the noun is a cardinal direction (this is the most roads lead to Downtown Anthar rule), say "You walk around the area, take in the local scene, and find yourself back here." The view of the stadium is a distant view. It is in Downtown Anthar. Understand "Flathead" as the view of the stadium. The printed name of the view of the stadium is "Flathead Stadium". It is proper-named. Chapter - Entrance to Greater Anthar (ANTHAR_GUSStop) Entrance to Greater Anthar is a room. "You're just west of Greater Anthar on the island nation of Antharia. The bright sunlight seems to make the city streets east of here glitter. A stairway leads down." The sunlight is in Entrance to Greater Anthar. [Note: see "Generally-Available Backdrops" for declaration of this object.] Understand "glitter" as the sunlight when the location is Entrance to Greater Anthar. An unimportant backdrop called a GUS Stop stairway is in Entrance to Greater Anthar. Understand "stairs" or "set of" as the GUS Stop stairway. A view of city streets is an unimportant distant view in Entrance to Greater Anthar. [IMPDO - GUS Stop Stairway as proxy entrance?] Section - Circular Sign (GUS_Sign) [Note that this object can be found in the file SUBWAY.INF in the original source code. It is relocated here for convenience of reference. Also note that this object made use of the I6 'found_in' property to appear in each *_GUSStop room. It is converted to an I7 backdrop here (set to not be scenery) for an equivalent effect. The backdrop's presence is declared piecemeal at each applicable location.] A backdrop called a circular sign is in Entrance to Greater Anthar. "Standing on a tall pole next to the stairs is a circular sign." The circular sign is not scenery. The description of the circular sign is "The sign reads 'GUS', and has an arrow pointing down." Understand "pole" or "GUS" or "arrow" as the circular sign. Chapter - Anthar West (ANTHAR_West) Anthar West is in Downtown Anthar. "You are standing in a busy section of West Greater Anthar City. The city seems to thin out to the west. A roadway heads east, the ever-popular Flathead Stadium lies a goodly distance to the northeast, and a pub lies to the south." It is east of Entrance to Greater Anthar. A roadway is scenery in Anthar West. [Note: stadium object is now a distant view present here, see beginning of this Part.] After smelling Anthar West (this is the Delbin's smells enticing rule), say "You can smell scents of local cooking coming from the south." Section - Pub A proxy entrance called a pub is in Anthar West. The relevant direction of the pub is south. Chapter - Anthar East (ANTHAR_East) Anthar East is in Downtown Anthar. "You are standing in a busy section of East Greater Anthar City. The city continues to the west. There is a large odd structure in the distance to the east, made mostly of glass. The ever-popular Flathead Stadium lies way off to the northwest. A short walk down to a waterfront area is to the south." It is east of Anthar West. [Note: stadium object is now a distant view present here, see beginning of this Part.] A scenery thing called a large odd structure is in Anthar East. Understand "glass" as the large odd structure. A thing called a view of the waterfront is a distant view. It is in Anthar East. The printed name of the view of the waterfront is "waterfront". After smelling Anthar East (this is the flower smell reaches all the way to downtown rule), say "You smell rather nice floral scents coming from the east." Chapter - Swank Waterfront (ANTHAR_Waterfront) Swank Waterfront is a room. "A pleasant waterfront walk is your current location. You can see the Great Sea stretching out before you to the south, a breath-taking sight. A rail runs along the south end, preventing an untimely fall to the rocky shore below. The city is back to the north." It is south of Anthar East. A railing is unimportant scenery in Swank Waterfront. Understand "rail" as the railing. An unimportant privately-named backdrop called the Great Sea is in Swank Waterfront. An unimportant backdrop called a waterfront walk is in Swank Waterfront. Understand "pleasant" as the waterfront walk. An unimportant backdrop called the shore is in Swank Waterfront. Understand "rocky" as the shore. Instead of swimming in Swank Waterfront (this is the waterfront is not a good place to swim rule): say "You can't reach the water from here; the climb is too steep." Instead of entering or swimming in the seawater in Swank Waterfront (this is the reroute entering the seawater in waterfront to swimming rule): try swimming in the location instead. Instead of doing something in Swank Waterfront when the noun is the seawater and the action requires a touchable noun (this is the water can't be reached from waterfront rule): say "The water is far out of reach below you. It's a wonderful view from here, though." Section - Viewing Telescope (telescope) [Note that, although for many objects this implementation takes pains to emulate the way that release 3/960606 shows contents as an inventory listing, in this case the original source code's specification that the telescope can hold only a single object makes it wreck the flow of the text without any benefit to listing clarity. As a result, this behavior is by design not emulated exactly. Also note that this object is defined as transparent in the original source code, presumably to allow players to "look through" it (which triggers an I6 Search action) even when it is closed without having the action stopped by the library. Unfortunately, the 6G60 Standard Rules' "examine containers rule", means that giving it a transparent property will also reveal the hidden musty scroll on initial inspection of the telescope.] A viewing telescope is a closed openable transparent container in Swank Waterfront. "There's a viewing telescope here, attached to the railing[if the item described is open]. One of the lenses seems loose. Inside it, you see [a list of things in the viewing telescope][end if]." It is fixed in place. The description of the viewing telescope is "A nice tourist toy. Perfect for getting a good view." The carrying capacity of the viewing telescope is 1. The size of the telescope is 10. Carry out examining the viewing telescope when the viewing telescope is closed (this is the suppress listing of telescope contents when examining the closed telescope rule): consider the standard examining rule; rule succeeds. [Forces halt to carry out rulebook processing before moving on to standard examining rule.] After opening the viewing telescope (this is the opening the telescope reveals contents rule): say "You pry loose a lens[if the viewing telescope is not empty], revealing [a list of things in the viewing telescope][end if]." After closing the viewing telescope (this is the closing the telescope rule): say "You push the lens back in place[if the viewing telescope is not empty], concealing [the list of things in the viewing telescope] inside[end if]." After searching the viewing telescope when the telescope is closed (this is the report what is seen through telescope rule): say "You take a peek through the telescope"; if the viewing telescope is not empty: say ", but -- oddly -- there's something blocking your view."; otherwise: if a random chance of 1 in 40 succeeds, say " and see a ship in the distance! Wait, perhaps not. It's gone."; otherwise say " and see the expanse of the Great Sea." Section - Musty Scroll (musty_scroll) A scroll called a musty scroll is in the telescope. The musty scroll is inscribed with fiznav. Chapter - Conservatory Entrance (Conservatory_entrance) Conservatory Entrance is a room. "You stand before the entrance to a large public conservatory. You can enter the greenhouses to the northeast and southeast, or walk back to Anthar to the west." It is east of Anthar East. A public conservatory is scenery in Conservatory Entrance. Understand "large" as the public conservatory. A scenery backdrop called some greenhouses is in Conservatory Entrance. After smelling Conservatory Entrance (this is the flower smell beckons busy bees rule), say "You can smell floral scents from the southeast." Section - Desert Greenhouse A proxy entrance called a desert greenhouse is in Conservatory Entrance. The relevant direction of the desert greenhouse is northeast. Understand "northern" as the desert greenhouse. Section - Floral Greenhouse A proxy entrance called a floral greenhouse is in Conservatory Entrance. The relevant direction of the floral greenhouse is southeast. Understand "southern" as the floral greenhouse. Chapter - Desert Garden (Con_Desert_garden) Desert Garden is a room. "A nicely arranged collection of desert plants is here in the 'Desert Garden'. Bright sunlight and a sandy ground enhance the overall effect. The conservatory entrance is to the southwest, or more gardens lie to the south and east." It is northeast of Conservatory Entrance. The sunlight is in Desert Garden. [Note: see "Generally-Available Backdrops" for declaration of this object.] Some plants and some gardens are unimportant vegetable-like scenery in Desert Garden. An unimportant uniquely-named scenery thing called some sandy ground is in Desert Garden. Understand "sand" as the sandy ground. The greenhouses are in Desert Garden. [See "Conservatory Entrance" for declaration of this backdrop.] A scenery distant view called an entrance to the conservatory is in Desert Garden. [This noun is treated as a room synonym for Flower Garden in source code, but it makes no sense to declare the entrance (another location) as irrelevant, so it gets the "nothing special" treatment.] Chapter - Flower Garden (Con_Flower_garden) Flower Garden is a room. "A rather lovely flower garden lies before you. The multi-colored flowers are turning the air into perfume. The conservatory entrance is northwest, or more greenhouse gardens lie to the north and east. A tiny trail leads south past the flower beds." It is southeast of Conservatory Entrance. An unimportant mass-nouned scenery thing called some perfume is in Flower Garden. A trail is an unimportant backdrop in Flower Garden. The greenhouses are in Flower Garden. [See "Conservatory Entrance" for declaration of this backdrop.] The entrance to the conservatory is in Flower Garden. [See "Desert Garden" for declaration of this backdrop.] [Note: In the original code, this message was associated with the room, but the smell *does* originate with the flowers.] Instead of smelling Flower Garden (this is the Flower Garden gets its smell from the flowers rule): try smelling the flowers instead. Instead of smelling the perfume (this is the perfume originates from the flowers rule): try smelling the flowers instead. Section - Flowers (flowers) Some flowers are vegetable-like scenery in Flower Garden. The description of the flowers is "A lovely assortment of flowers." Understand "flower" or "garden" as the flowers. After smelling the flowers, say "The bouquet of flowers is quite intoxicating." Instead of taking the flowers (this is the don't pick the flowers rule), say "Don't pick the flowers." After casting throck at the flowers (this is the you get your junior landscaping badge rule): say "A few more flowers spring out of the ground." Chapter - Gardener's Storehouse (Con_storehouse) Gardener's Storehouse is a room. "This must be a storehouse for the conservatory gardeners. There are soil stains and plant debris all over. The only exit is north." It is south of Flower Garden. Some stains are unimportant scenery in Gardener's Storehouse. Understand "soil" as the stains. An unimportant mass-nouned backdrop called some plant debris is in Gardener's Storehouse. Section - Toolshed (toolshed) A locked lockable closed openable fixed in place container called a toolshed is here. "[toolshed appearance]". The carrying capacity of the toolshed is 10. The size of the toolshed is 20. The description of the toolshed is "A plain toolshed." Understand "tool shed" or "shed" as the toolshed. [See small metal key section for unlocking relation declaration.] The toolshed is linewriter-abusing. To say toolshed appearance: if the toolshed is closed: say "A toolshed stands closed against the wall. [line break]"; otherwise: say "The toolshed is open. "; if the toolshed is empty: say "It's empty. [line break]"; otherwise: say "[Spiritwrak-style contents description for toolshed]". Section - Cap (gardeners_cap) A headpiece called a cap is in the toolshed. It is wearable. The size of the cap is 10. The description of the cap is "A cap with an odd green emblem stitched on the front that looks like a clover." Understand "green" or "emblem" or "clover" or "odd" as the cap. Section - Hedge Clippers (hedge_clipper) Some hedge clippers are in the toolshed. Understand "clipper" or "scissors" or "trimmer" or "trimmers" as the hedge clippers. The size of the hedge clippers is 15. The description of the hedge clippers is "Basically a long pair of scissors." Section - Rubber Gloves (rubber_gloves) [Note that this is one of the rare cases where the indefinite article must be formally defined in I7.] Some rubber gloves are in the toolshed. They are wearable. The size of the rubber gloves is 10. The indefinite article of the rubber gloves is "a pair of". The description of the rubber gloves is "A pair of yellow rubber gloves, slightly worn. Good for gardening, or washing dishes, I suppose." Understand "pair" or "pair of" or "yellow" as the rubber gloves. Section - Cracked Parchment (p3) A parchment called a cracked parchment is in the toolshed. The description of the cracked parchment is "'...is true that those who go by the title of 'Enchanters' need not wear any holy symbol through which to draw magical power. Indeed, it seems as though the very amulets we must wear are our only link to magical powers at all. Worse yet, the powers are indeed granted from powers above, but the Ancient Ones? I think not. For indeed, I have found places where magic powers will not work, with or without the amulet. Likewise, I have found places where magic works, but praying to the Ancient Ones goes unanswered! What this all...'" Chapter - Decorative Plants Garden (Con_Decor_garden) Decorative Plants Garden is a room. "You are standing in a small well-kept garden. The plots surrounding the paths are filled with a variety of general ground-cover plants, all appropriate for most discerning homeowners. Exits lie north and south." It is south of Desert Garden and north of Flower Garden. An unimportant mass-nouned scenery vegetable-like thing called some ground-cover is in Decorative Plants Garden. Some plots are unimportant scenery in Decorative Plants Garden. [Note: tinsel and ornament moved to next section, as they are part of the Christmas tree monster.] Some soil is an unimportant mass-nouned backdrop in Decorative Plants Garden. Section - Christmas Tree Monster (Christmas_tree_monster) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'pruned' is applied to the flag function now. Also note that, although it was not declared with the I6 'transparent' attribute in the original source code, it is given the "open-inventoried" property here to allow the tinsel and ornaments that are declared part of it to be seen (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part).] An open-inventoried vegetable-like animal called a Christmas tree monster is in Decorative Plants Garden. "A Christmas tree stands in one plot, swaying back and forth." The description of the Christmas tree monster is "The Christmas tree monster has obviously seen some good years. It towers above you, wrapped with tinsel that sparkles marvelously. The plastic flamingo ornaments are a rather gaudy touch. Surprisingly, it seems to have taken root in the soil." The Christmas tree monster can be pruned. It is cuttable. An unimportant mass-nouned thing called some tinsel is part of the Christmas Tree Monster. Some plastic flamingo ornaments are unimportant things part of the Christmas tree monster. The printed name of the plastic flamingo ornaments is "ornaments". Understand "ornament" as the ornaments. [If I'm reading the code right, the tree does *something* every turn, and in 7 of 10 cases, it's not humming. This is restructured to reduce special event frequency and to take advantage of I7 functionality to reduce repetition for non-humming events.] Instead of listening to the location when the Christmas Tree Monster is at hand (this is the noise from the Christmas Tree Monster is very noticeable rule): try listening to the Christmas Tree Monster instead. Instead of singing when the Christmas tree monster is at hand (this is the can't hear the chorus for the tree rule): say "Your singing is drowned out by a particularly ebullient refrain from the tree monster." instead. Instead of showing the toy volcano to the Christmas tree monster (this is the conical shapes disturb the Christmas tree monster rule): say "The tree abruptly stops singing, and seems a trifle flustered for some reason. Moments later, it resumes its chorus." This is the Christmas Tree Monster default life behavior rule: say "The tree just keeps on singing." Instead of doing something when the current action is generic life behavior and the current action involves the Christmas tree monster (this is the Christmas tree monster generic life rule): abide by the Christmas Tree Monster default life behavior rule. Persuasion rule for asking the Christmas Tree Monster to try doing something (this is the reroute understood orders to Christmas Tree Monster to generic life response rule): consider the Christmas Tree Monster default life behavior rule; rule fails. Check the player cutting the Christmas tree monster when the player does not bear the hedge clippers (this is the Christmas tree monster cutting rule): say "You'll need a gardening implement to do that." instead. Check the player cutting the Christmas tree monster when the player bears the hedge clippers and the player does not carry the hedge clippers (this is the hedge clippers must be carried to clip with them rule): silently try taking the hedge clippers; if the hedge clippers are not carried by the player: say "It won't be easy to cut with [the hedge clippers] while [subject pronoun of hedge clippers] are in [the holder of hedge clippers]."; rule fails; otherwise: say "(first fetching [the hedge clippers] from [the holder of the hedge clippers])[line break]". Check the player cutting the Christmas tree monster when the Christmas tree monster is pruned (this is the can only cut the Christmas tree once rule): say "The gardener said he'd make you dig for slugs, and that doesn't sound too exciting, so let's leave the tree alone." instead. Carry out cutting the Christmas tree monster: now the Christmas tree monster is pruned. [Note: logic here is somewhat revised from the original code due to need for stronger hinting] After cutting the Christmas tree monster (this is the aftermath of tree-trimming rule): say "You begin to clip a few of the lower branches of the tree, which starts bellowing in pain! Instantly, a short old man appears, wearing full gardener regalia.[paragraph break]'What are ya trying to do there, kill the thing?!' he fumes, as he barges between you and the whimpering monster. "; if the pair of thick glasses is in Fountain Area: remove the pair of thick glasses from play; say "The old man pulls out a pair of [if the pair of thick glasses had been in the tasteful fountain]slightly damp [end if]glasses and puts them on. 'Say, you're not the new apprentice,' he says, peering at your clothes. 'If you want to practice introductory horticulture, do it in someone else's garden!'"; seize gardener contraband; rule succeeds; [halt processing] otherwise: say "'Who are you sonny?' he demands, squinting at you as he pats his pockets in confusion. 'Confound it, lost my glasses again,' he mutters. "; if the cap is not worn by the player: say "He squints again, looking you over from top to bottom, and says, 'Well, whoever you are, the gardens are for visitors to observe, not... not... mutilate!'"; seize gardener contraband; otherwise: [Note: setting of pruned flag moved to carry out rule] accomplish taming-of-the-yew; say "[paragraph break]He looks at you again, and notices your cap. 'Ah. You must be one of the new boys. Here, look, I'm not going to show you twice.' He takes the clippers and delicately clips away several lower branches, all the while crooning 'It's Beginning to Look a Lot Like Christmas' to his ward. Between sniffling sounds, the Christmas tree monster falteringly joins in the refrain and soon returns to its normal exuberance; it appears to be rapidly recovering from your mistreatment.[paragraph break]The gardener finishes trimming the tree, leaving an opening to expose the shrub next to it to the sunlight, and stops singing. 'I'm starting to hate that tune,' he grumbles.[paragraph break]With that, he hands the clippers back to you and says, 'Now if I catch you doing this wrong again, I'm going to make you dig for slugs, understand?' He disappears as quickly as he appeared." To seize gardener contraband: say "[line break]"; if the player bears the cap and the cap is not stashed out of sight: remove the cap from play; say "As he turns to go, the gardener notes the cap in your possession and retrieves it smartly. 'That's conservatory property!' he exclaims. 'Only employees are entitled to wear it.' "; if the player bears the hedge clippers and the clippers are not stashed out of sight: say "With that, he grabs [the hedge clippers] from [if the player carries the hedge clippers]your hands[else][the holder of the hedge clippers][end if] and stalks off."; remove hedge clippers from play. After casting a spell at the Christmas tree monster (this is the there's no magic greater than the magic of Christmas rule): say "You start chanting, but the tree starts singing 'Plover the River and Frotz the Woods,' and you can't help joining in, ruining your chant." After listening to the Christmas tree monster (this is the expect the unexpected rule): say "You hear nothing unexpected, except, of course, the singing tree." Every turn when the Christmas tree monster is at hand (this is the Christmas tree monster is musical rule): if a random chance of 3 in 10 succeeds: say "[one of]The Christmas tree monster belts out a few bars of 'I'm Dreaming of a Black Cavern' arranged by Bing Frozby.[or]The Christmas tree monster sings a few measures from Berknip's own rendition of 'Silent Night', a rather morbid version.[or]The Christmas tree monster hums a few notes from 'Dornbeasts Roasting on an Open Pyre.'[or]The Christmas tree monster whistles a part of 'Frosty the Snow Wight.'[or]The Christmas tree monster sways in time to 'Let it snow, let it snow, let it snow!'[or]The Christmas tree monster treats you to an abridged version of Handel's 'Messiah.'[in random order]"; otherwise: say "The Christmas tree monster hums to itself." Section - Dornberry Bush (dornberry_bush) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'thriving' is applied to the flag function now.] A fixed in place cuttable vegetable-like supporter called a dornberry bush is in Decorative Plants Garden. "A small shrub sits very near the Christmas tree[if Christmas tree monster is not pruned], which almost completely covers it[end if]." The dornberry bush can be thriving. The carrying capacity of the dornberry bush is 1. Understand "shrub" or "plant" as the dornberry bush. The description of the dornberry bush is "The small shrub looks [if not thriving]rather poorly tended. Just a few green leaves distinguish it from the surrounding soil[else]quite healthy. A cluster of green leaves and branches make a nice plant. It's still smaller than the tree, though[end if]." To say dornberry rejects insertions: say "I don't think the shrub can support [demonstrative object pronoun of the noun]." [Following behavior not included in original version.] Instead of taking or pulling the dornberry bush (this is the wholesale transplantation is not the solution rule): say "The bush is deeply rooted. It resists all attempts to pull it from the ground." Instead of putting something on the dornberry bush (this is the can't put things on the dornberry bush rule): say "[dornberry rejects insertions]". Instead of inserting something into the dornberry bush (this is the can't insert things into the dornberry bush rule): say "[dornberry rejects insertions]". [Following behavior not included in original version.] Check cutting the dornberry bush (this is the don't allow cutting dornberry bush rule): if the dornberry bush is thriving: say "It would be a shame to cut it back when it just got a chance to grow." instead; otherwise: say "It hardly needs to be pruned -- it's barely surviving." instead. After casting throck at the dornberry bush when the Christmas tree monster is not pruned (this is the there is insufficient photosynthesis rule): say "The shrub begins to shake! A new leaf grows, searches for the sunlight, fails, and withers." After casting throck at the dornberry bush when the dornberry bush is thriving (this is the throck me twice shame on me rule): say "The shrub shakes a bit, but the plant remains the same. For a Dornberry bush, it's already probably the healthiest one you've ever seen." After casting throck at the dornberry bush when the Christmas tree monster is pruned and the dornberry bush is not thriving (this is the throck what is it good for absolutely baking rule): now the dornberry bush is thriving; now the dornberries are on the dornberry bush; say "The shrub begins to shake! A new leaf grows, searches for the sunlight, and finds it! Another leaf follows, and soon the shrub is sprouting new branches. In the sunlight, flowers appear, and many missed-out growing seasons are made up for in minutes. The shrub is now quite a thriving plant[if the dornberries are on the dornberry bush], covered with tiny red fruit[end if]." Section - Dornberries (dornberries) [Note that the logic of the baking-related after rule here is is not in the original version but is added for consistency in the treatment of cake ingredients.] There are some dornberries. They are edible and vegetable-like. They are scored. The size of the dornberries is 5. The description of the dornberries is "A bunch of tasty-looking red berries." Understand "dornberry" or "berries" or "berry" as the dornberries. Understand "bunch" or "bunch of" as the dornberries when the dornberries are not enpanned. Understand "smashed" or "fragrant" or "pulp" as the dornberries when the dornberries are enpanned. After inserting the dornberries into the baking pan (this is the convert dornberries to mess rule): now the printed name of the dornberries is "smashed dornberries"; now the description of the dornberries is "Some fragrant dornberry pulp."; say "You smash the dornberries and place the pulp into the pan." After smelling the dornberries (this is the dornberries smell good rule): say "MMMMmmmm, yum! Everyone loves dornberries." Section - Informational Plaque (plaque) A fixed in place thing called an informational plaque is in Decorative Plants Garden. "A small informational plaque sticks out of the soil near the two plants." The description of the plaque is "The plaque reads:[paragraph break][fixed letter spacing][1 spaces]CHRISTMAS TREE MONSTER[14 spaces]DORNBERRY BUSH[line break][10 spaces][variable letter spacing]". Chapter - Forest Garden (Con_Forest_garden) Forest Garden is a room. "A garden path winds through this narrow greenhouse, which is stocked with various forest plants. The path winds back to the west and south." It is east of Desert Garden. A path is an unimportant backdrop in Forest Garden. Section - Trees (plants1) [The name collision here with other, different background items in other locations means it's much easier to just change the primary name of the object, so I'm deviating a bit from original code here.] Some trees are vegetable-like scenery in Forest Garden. The description of the trees is "You are reminded of a hiking trip you took once." Understand "plant" or "plants" or "tree" or "forest" as the trees. After casting throck at the trees (this is the when your only tool is a throck everything looks like a plant rule): say "The forest seems a bit livelier now." Chapter - Jungle Garden (Con_Jungle_garden) Jungle Garden is a room. "A garden path winds through this long greenhouse, which is filled with plants native to jungle settings. The environment is somewhat humid. The path heads west and north from here." It is east of Flower Garden. Some humidity is unimportant uniquely-named scenery in Jungle Garden. Understand "humid" as the humidity. The path is in Jungle Garden. [See "Forest Garden" for declaration of this backdrop.] Instead of going east from Jungle Garden when the waterfall is not passable (this is the can't go through waterfall before it's known to be fake rule): abide by the fake can't go that way rule. After smelling Jungle Garden (this is the flower smell permeates the jungle rule), say "You smell flowers to the west." Section - Jungle (plants2) A vegetable-like scenery thing called a jungle is in Jungle Garden. The description of the jungle is "Reminds you of a picture you once saw of the Miznia jungles." Understand "plants" or "plant" or "trees" or "tree" as the jungle. After casting throck at the jungle (this is the let's take this jungle up to eleven rule): say "The jungle seems a bit livelier now." Section - Small Waterfall (waterfall) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'passable' is applied to the flag function now.] A small waterfall is a fixed in place thing in Jungle Garden. "[waterfall details] to the east." The small waterfall can be passable. The description of the small waterfall is "A small [if passable]fake [end if]waterfall drops out of a mock-stucco wall to the east." Understand "fall" or "falls" or "water fall" or "water falls" as the small waterfall. To say waterfall details: if the small waterfall is not passable, say "A nice little waterfall enhances the jungle setting"; otherwise say "A fake waterfall hides a passage". After rubbing or touching or searching the small waterfall when the small waterfall is not passable (this is the manipulating the waterfall reveals its secret rule): now the small waterfall is passable; say "You reach out, expecting to get your hands wet, but, to your surprise, you feel a cloth-like substance. On closer examination, you realize that the waterfall is a clever realistic-looking fake, made of cloth and wood. Stepping around some low plants, you also notice the waterfall covers a passage east!" Instead of pushing or pulling the small waterfall when the small waterfall is not passable (this is the translate pushing or pulling the waterfall as touching it rule), try touching the small waterfall instead. Instead of throwing something at the small waterfall when the small waterfall is not passable (this is the throwing things at the waterfall reveals its secret rule): now the small waterfall is passable; now the noun is in the location; say "[The noun], to your surprise, literally bounces off the waterfall, and lands with a thump nearby."; rule succeeds. [Needed to make the action succeed, because it is implied that it does.] Chapter - Nursery (Con_Nursery) Nursery is a room. "This small back room is apparently the conservatory nursery. Bits of soil and plant debris are everywhere, along with immature seedling plants. A exit lies west, partially covered by some cloth." It is east of Jungle Garden. Some cloth is an unimportant mass-nouned scenery in Nursery. Some immature seedlings are unimportant vegetable-like scenery in Nursery. The plant debris is in Nursery. [See "Gardener's Storehouse" for declaration of this backdrop.] The soil is in Nursery. [See "Decorative Plants Garden" for declaration of this backdrop.] Section - Small Metal Key (shed_key) There is a key called a small metal key. It unlocks the toolshed. The description of the small metal key is "A small metal key." The size of the small metal key is 4. Section - Small Flower Pot (smallpot) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'shifted' is applied to the flag function now. Also note that, in the original source code, this object is given the I6 'transparent' attribute, but there does not appear to be a good reason for this, so this implementation omits the property. Finally, note that, in the original, this object is not given a carrying capacity. It is arbitrarily given a capacity of 10 here; the rules of insertion should prevent unrealistic use of it as a carry-all for large things.] An open container called a small flower pot is in Nursery. The small flower pot can be shifted. The description of the small flower pot is "A small, red ceramic flower pot, ideal for small plants, I suppose." The carrying capacity of the small flower pot is 10. The size of the small flower pot is 15. Understand "flowerpot" or "red" or "ceramic" as the small flower pot. After pushing or pulling the small flower pot when the small flower pot is not shifted (this is the pushing the flower pot shifts it rule): reveal the shed key; say "Moving the pot uncovers a small key hidden underneath it." After taking the small flower pot when the small flower pot is not shifted (this is the taking the flower pot shifts it rule): reveal the shed key; say "Moving the pot uncovers a small key hidden underneath it."; continue the action. To reveal the shed key: now the small flower pot is shifted; move the small metal key to Nursery. After looking under the small flower pot when the small flower pot is not shifted: say "The pot does appear to be sitting crookedly, but you can't see whatever is under it." To magically reveal the shed key: reveal the shed key; say "As the pot disappears, a key it was covering is revealed." After casting huncho at the small flower pot when the small flower pot is not shifted (this is the pot ascension reveals key rule): magically reveal the shed key. After casting luncho at the small flower pot when the small flower pot is not shifted (this is the pot damnation reveals key rule): magically reveal the shed key. Chapter - Fountain Area (Con_Fountain) [Severe naming conflict between fountain object and Fountain room compels renaming of one of them.] Fountain Area is a room. "A tasteful fountain intercepts a north-south garden trail here." It is south of Forest Garden and north of Jungle Garden. The printed name of Fountain Area is "Fountain". The path is in Fountain Area. [See "Forest Garden" for declaration of this backdrop.] Every turn while the location is Fountain Area (this is the whistles are heard sometimes near fountain rule): if a random chance of 1 in 20 succeeds, say "You hear someone whistling nearby, but there doesn't seem to be anyone around." Section - Tasteful Fountain (fountain) [This object took advantage of the 'general' property in the original code. The more descriptive label of plundered is applied to the flag function now. Also note that, due to the fact that the glasses are noted as wet by the gardener if they've been in the fountain, the description of the fountain is modified to make it clearer that it contains water.] An open scenery watery container called a tasteful fountain is in Fountain Area. The printed name of the tasteful fountain is "fountain". the tasteful fountain can be plundered. The carrying capacity of the tasteful fountain is 10. The size of the tasteful fountain is 25. The description of the tasteful fountain is "A stone basin with a central fountain spout shaped like a fish. There is water in the basin, but nothing comes from the spout." [Note: see "Coins" under "New Kinds" for declaration of coin objects.] After searching the tasteful fountain when the tasteful fountain is not plundered (this is the fountains always seem to have coins in them in text adventures rule): now the tasteful fountain is plundered; move a random uncirculated coin to the tasteful fountain; say "You fish in the fountain for a bit and find a coin!" After searching the tasteful fountain: say "Mostly wet plant debris"; if the tasteful fountain is empty, say ", nothing interesting."; otherwise say ". You also notice:[paragraph break][Spiritwrak-style contents list for the tasteful fountain]" After inserting a coin into the tasteful fountain (this is the luck can't be bought rule): create an expectant pause for the narrator's challenge about luck; say "Hoping for a little luck, I presume?" The narrator's challenge about luck is a binary reply. The positive rejoinder of the narrator's challenge about luck is "Good luck to you!" The negative rejoinder of the narrator's challenge about luck is "Of course not. An old pro like you doesn't need luck." Section - Pair of Thick Glasses (glasses) A pair of thick glasses is in Fountain Area. "It looks like someone left their glasses here." The pair of thick glasses is wearable. The size of the pair of thick glasses is 5. The description of the pair of thick glasses is "Thick lenses and a heavy frame." After wearing the pair of thick glasses: silently try taking off the pair of thick glasses; say "You put the glasses on for a moment, and it's like looking through a fishtank. Deciding against continuing your quest without adequate vision, you take them off." Chapter - Delbin's Pub (Delbins) [This room took advantage of its 'general' property in the original code, but the use of the flag seems to indicate it really tracked a change in the state of the barbarians here. Logic is revised to accord with this view. Also note this object had a 'number' property in the original code, but the only use it was put to was in ensuring single showings of the messages about the brewing conflict between the adventurer trio. Since this functionality is more cleanly handled in I7, the 'number' property is omitted here.] Delbin's Pub is a room. "Delbin's Pub has been a popular food and drink spot in South Anthar for quite a while.[if barbarians are boisterous] A group of barbarians are making a lot of noise nearby.[otherwise] Usually, you need to fight off barbarians to find a place to sit. At the moment, however, the place is unusually quiet. A group of barbarians seem paralyzed with fear near the back wall, glancing nervously at the front of the bar.[end if] The exit is to the north." It is south of Anthar West and inside from Anthar West. A back wall is unimportant scenery in Delbin's pub. Instead of listening to Delbin's Pub (this is the noise in Delbin's comes from its patrons rule), try listening to the barbarians instead. [Note: The following was written as an I6 Before property in the original code; it is translated to an I7 before rule because it is intended to allow the action to continue.] Before going from Delbin's Pub (this is the Delbin encourages repeat business rule), say "Delbin calls out 'Visit us again!' as you leave." Morgan the Ranger is here. Frobar is here. The Thief is here. Every turn when the location is Delbin's Pub and Morgan is in Delbin's Pub (this is the sporadically indicate beer conflict rule): if a random chance of 1 in 3 succeeds, say "[one of]The man in black makes a lightning fast move for the glass of ale, but is countered by an equally fast move by the warrior. 'Lose something, thief?' the woman says. 'No need to get violent, Morgan,' replies the thief.[or]The wizard looks at his companions. 'Say, did I ever show the two of you my famous disappearing glass trick?' He starts to take off his wizard's hat, but the gentleman and ranger each seize an arm. 'Don't even try it, Frobar,' the woman warrior growls.[or]The female ranger fixates on the glass of ale. 'Look, you two: Some of us have better things to do, like fight wars.' The wizard scowls. 'Oh, save it, Morgan.' he replies.[or]The tension in the air fairly crackles as the eyes of the three adventurers flick between each other and the single glass of ale on the bar.[stopping]" Section - Barbarians (barbarians) [This object took advantage of the 'general' property in the original code. The 'boisterous/subdued' property replaces it here, in order to be more descriptive. Also note that the barbarians were given the I6 'concealed' property in the original source code, most likely to prevent them from being mentioned in room descriptions. Here the "scenery" property is used for the same purpose, which seems more consistent than calling them concealed when they are mentioned in the room description.] Some barbarians are people in Delbin's Pub. They are scenery. The barbarians can be boisterous or subdued. The description of the barbarians is "A group of barbarians, characteristically lacking in manners and hygiene. One of them sees you staring at them, and gives you a dirty look." Understand "group of" or "group" as the barbarians. [Note: original code checked if Morgan was in location, but her disappearance drives a change in the state of the barbarians, so this is revised.] This is the barbarians default life behavior rule: if the barbarians are boisterous: say "The barbarians are far too busy telling rude jokes at the moment."; otherwise: say "The barbarians are somewhat paralyzed with fear at the moment." Instead of doing something when the current action is generic life behavior and the current action involves the barbarians (this is the barbarians generic life rule): abide by the barbarians default life behavior rule. Persuasion rule for asking the barbarians to try doing something (this is the reroute understood orders to barbarians to generic life response rule): consider the barbarians default life behavior rule; rule fails. After listening to the barbarians: if the barbarians are boisterous, say "The barbarians are a rather noisy bunch."; otherwise say "The only noise in the unnatural hush is the occasional slight gasp, emanating from a spectator who has held their breath too long." Section - Headdress (headdress) A headpiece called a headdress is in Delbin's Pub. "A gaudy headdress of some kind is hanging on a nearby wall." The headdress is wearable. The size of the headdress is 15. The description of the headdress is "A large headdress made of animal fur and colorful bird feathers." Section - Bar (bar) [Note that, in the original code, this object contained an I6 Before() clause for the LetGo fake action (see DM4 p. 119), which would cause the player to execute a Take action instead of a Remove action for the ale_glass object. This behavior is automatic as part of I7 6G60's Standard Rules, so no comparable logic is implemented here.] The bar is a scenery supporter in Delbin's Pub. The description of the bar is "A long, flat, wooden bar that could probably use a washing." Understand "front" or "of" as the bar. [Note: The following was written as an I6 'Before()' routine for the Cast action in the original code; it is translated to I7 as an after rule because it is intended to occur after casting is completed.] After casting egdelp at the bar (this is the Delbin is not so keen on presentation rule): say "The bar is covered with a waxy film. Delbin notices this and shrugs." Section - Glass of Ale (ale_glass) A glass of ale is on the bar. The description of the glass of ale is "A small glass filled with a foaming amber liquid." Understand "beer" as the glass of ale. To say cold stares: say "You receive cold stares from the three individuals at the bar. " Instead of taking the glass of ale (this is the can't take the ale rule), say "[cold stares]'Get your own,' the Ranger snarls, as she pushes you back." Instead of drinking the glass of ale (this is the can't drink the ale either rule), say "[cold stares]'Get your own,' the Thief says and takes the glass from you before you can bring it to your lips." Instead of turning or pushing or pulling or shaking the glass of ale (this is the experimentation with the ale is discouraged rule), say "[cold stares]'Get your own,' the Wizard says and prevents you." Instead of throwing something at the glass of ale (this is the barbarians are deadly serious about accidental spillage rule): say "[The noun] hits the glass and nearly topples it! A voice from the back of the room says 'Garn! He nearly ruined a perfectly good glass of ale, he did.' The three individuals at the bar turn to you with angry stares, but before you can respond, some barbarians pummel you to death for poor bar manners."; end the game in death. After casting zemdor at the glass of ale (this is the there's more than one way to win a spat rule): settle the conundrum. To settle the conundrum: now the barbarians are boisterous; remove the glass of ale from play; accomplish settling-the-bar-grab; move Morgan to Ravine Pass; move Frobar to Study; if the copy of Enchanter Monthly is in the mailbox: now Frobar carries the copy of Enchanter Monthly; now Frobar is perambulatory; [Frobar will start wandering around] now the Thief is off-stage; if the priceless painting is in North Exhibit Room and the glass barrier is not in North Exhibit Room: now the priceless painting is portable; now the priceless painting is in Workroom; [Thief immediately steals it, game unsolvable per original logic, since door not left behind] say "You quickly make the zemdor chant and watch the glass of ale start to shimmer! In a short time, there are three glasses filled with ale on the bar.[paragraph break]Morgan the Ranger looks suspiciously at Frobar the Enchanter. 'Is this your doing, wizard?' Frobar shakes his head. 'Surely not, you know I can't do magic anymore.' He glances briefly in your direction. 'No matter,' the thief says, and raises a glass. 'To the spirit of adventure!' The three down their glasses quickly. [paragraph break]Morgan smiles. 'Now, that's good ale.' She adjusts her broadsword. 'I'm off to the Egreth front. Want to help end a war, Frobar?' Frobar chuckles. 'Thank you, no. I've got, err, something to do at home,' he says and quickly leaves. 'Well, then, what about you, thief?' Morgan asks, and notices that the thief has already slipped away.[paragraph break]She shrugs and leaves the bar as well. 'Good hunting!' Delbin calls after her." To prevent interplanar interference: say "You begin the chant, but something about it gets the Enchanter's attention. 'If you have something to say, why don't you share it?' With a subtle gesture, the Enchanter dispels the chant." After casting huncho at the glass of ale (this is the no beers go the heaven rule): prevent interplanar interference. After casting luncho at the glass of ale (this is the supernatural teetotalism not allowed rule): prevent interplanar interference. Section - Dirty Rag (rag) A dirty rag is on the bar. The description of the dirty rag is "A slightly dirty cleaning rag." Section - Delbin (Delbin) [Note: This object included a 'number' property in the original code, but its use has not yet been observed, so it is omitted here. Also note that this NPC does not have the equivalent of a "generic life rule" in the original source code, i.e. there is no default response for its I6 'life()' property.] Delbin is a man in Delbin's Pub. "Delbin himself is standing behind the bar." The description of Delbin is "Delbin is a stout, bald fellow with laughing eyes and a heavy beard. He somehow seems both young and old at the same time." Understand "bartender" or "owner" as Delbin. An unimportant thing called a heavy beard is part of Delbin. To exhibit sympathy for old bartenders: say "Leave good old Delbin alone." Instead of attacking Delbin (this is the do not harass the information dispenser rule): exhibit sympathy for old bartenders. Instead of kissing Delbin (this is the do not molest the information dispenser rule): exhibit sympathy for old bartenders. Instead of throwing something at Delbin (this is the do not bean the information dispenser rule): exhibit sympathy for old bartenders. Instead of giving a coin to Delbin (this is the Delbin gives advice for free rule): say "Delbin refuses your offering. 'Keep your change, sir. If you're looking for a good tip, I can tell you what I hear.'"; try asking Delbin about "rumor" instead. Instead of giving the rag to Delbin (this is the Delbin recycles rags rule): now the rag is on the bar; say "Delbin takes the rag and cleans a spot on the bar, leaving it in a familiar place."; rule succeeds. [force success of action] Instead of giving something to Delbin (this is the Delbin generally refuses things rule): say "Delbin politely refuses." Delbin recognizes Morgan the Ranger, Frobar, the Thief, and the headdress. [Note that Delbin doesn't "recognize" some items, like the rag or rods, that do have specific responses -- this means that rules specific to the "querying it about" action will only be triggered if the item in question is in scope when the PC asks about them.] Instead of querying Delbin about Morgan the Ranger (this is the Delbin's opinion of Morgan rule): say "'Morgan Grueslayer's a skilled ranger.'" Instead of querying Delbin about Frobar (this is the Delbin's opinion of Frobar rule): say "'Frobar's probably one of the last enchanters around. He's a regular here.'" Instead of querying Delbin about the Thief (this is the Delbin's opinion of The Thief rule): say "'Don't really know that fellow's name. He tips well, though.'" To have Delbin explain the standoff: say "'Quite a situation we've got sir. Those three at the front of the bar all ordered a glass of Special Borphee Ale. Well, with the shutdown of the Brewers Guild in Borphee since the Great Change, I can't keep that particular beverage in stock, but I've got that one left there. Seems none of them's leaving until they decide who gets the ale -- and let me tell you, those three are folks who don't like to be disappointed!'" [Note that the next rule assumes Morgan does not return to Delbin's after the standoff is resolved.] Instead of querying Delbin about the glass of ale when Morgan is at hand (this is the Delbin explains the beer standoff rule): have Delbin explain the standoff. Instead of querying Delbin about a rod (this is the Delbin don't know much about history rule): say "Delbin glances at [the noun] with little interest. 'Seems like I've heard of those before, but I can't recall much about [']em.'" Instead of querying Delbin about the headdress (this is the Delbin has forgotten a funny story about the headdress rule): say "[one of]'There's a good story behind that ugly thing. Maybe if you keep reminding me, I'll remember it.'[or]'It had something to do with this guy and this thing...'[or]'Wait -- it'll come to me...'[or]'Ah. I can't remember.'[or]'Memory's the first thing to go, you know.[or]Delbin just smiles and shakes his head.[stopping]". Instead of querying Delbin about the dirty rag (this is the Delbin also considers it a friend rule): say "'Not much more than a rag, sir.'" Instead of asking Delbin about "rod/rods" (this is the Delbin don't know much theology rule): say "Delbin shrugs. 'Sounds vaguely familiar sir, maybe I heard a rumor about it once. Can't really say, though.'" [Note that the next rule assumes Morgan does not return to Delbin's after the standoff is resolved.] Instead of asking Delbin about "situation/standoff/tension" when Morgan is at hand (this is the Delbin provides backstory on beer conflict rule): have Delbin explain the standoff. Instead of asking Delbin about "ale/beer/drink/beverage" (this is the Delbin doesn't believe in inventory rule): create an expectant pause with Delbin asking Delbin's challenge about ale supplies; say "Delbin smiles. 'All out of ale sir. But I suppose ye already knew that?'" Delbin's challenge about ale supplies is a binary reply. The positive rejoinder of Delbin's challenge about ale supplies is "Delbin throws you a hard look, then returns to tending the bar." The negative rejoinder of Delbin's challenge about ale supplies is "'Sorry. Those three got the last of it,' he says." Instead of asking Delbin about "minirva" (this is the Delbin holds the key to the boat mystery rule): say "'I think that's the name of some old Antharian Sea Goddess. Like a patron saint to sailors, in the old days.'" Instead of asking Delbin about "rumor/rumour/rumors/rumours/story/scuttlebutt/grapevine/hearsay/news/gossip/latest/tidings/chatter" (this is the Delbin likes to gossip rule): say "Delbin scratches his ear and says, 'Yes, now, what did I hear...[paragraph break]"; let i be a random number from 1 to 7; if i is: -- 1: say "'People tell me this new Flathead king is a fake, plain and simple. Hasn't stopped people from trying to get on his good side, though. Now, I haven't seen the fellow myself, but if you ask me, somebody somewhere is up to no good.'"; -- 2: say "'They say the kobold war up north is gonna end real soon. I'll believe that when it happens.'"; -- 3: say "'Oh, this one's a good one. [if headdress is unhandled]You see that headdress over there? Well, this explorer fellow left it here, along with quite a story. He [else]Some explorer fellow [end if]claimed he found a lost, ancient city in the Miznia jungles. Said he made a map to the place, but lost it when bargaining for his life with some jungle natives. I just nodded and let the poor man talk.'"; -- 4: say "'This crazy-looking old fellow stops in the other day. Said that he was a professor, at GUE Tech, but that he was giving that all up! Something about his research going bad, on something he called an [']ethereal gate[']. What all of that means, I can't say.'"; -- 5: create an expectant pause with Delbin asking Delbin's challenge about the rod; say "'Say, you sorta remind me of this other Priest fellow who stopped by here a long long time ago. Delbin never forgets, you know? This fellow, who didn't give a name, told me he was on an important quest for something called -- now, what was it?... [']The Rod of the Ancients,['] or something like that. That mean anything to you?'"; -- 6: say "'An artist friend of mine tells me that this new Leonardo Flathead painting they've recently discovered on display at the Royal Museum has a special secret. They say that Leonardo painted over something else under the canvas, but no one's saying what. They're keeping a watchful eye on it too, just in case curiosity gets the better of some folk. In fact, I hear they've already had a few people trying to steal the thing[if The Thief is at hand].[paragraph break][one of]The gentleman at the bar seems about to say something, but, after a pregnant pause, remains silent[or]The gentleman starts to cough, and controls himself[or]The gentleman at the bar clucks to himself. You think you hear the word 'amateurs' muttered under his breath[or]The gentleman at the bar remains stoically silent, but you can't help feeling that you've attracted his attention[at random][end if]."; -- otherwise: say "'Guess I'm getting old,' he says with a shrug. 'Nothing comes to mind at the moment. Maybe if you give me a moment, I'll think of something.'" Delbin's challenge about the rod is a binary reply. The positive rejoinder of Delbin's challenge about the rod is "'Yeah,' he says, 'I thought it might. You sort of remind me of that guy.'" The negative rejoinder of Delbin's challenge about the rod is "'Me, neither, pal. He wouldn't shut up about it, though. Kept saying the colors were all wrong.'" After taking the headdress when Delbin is at hand and the headdress was unhandled (this is the Delbin doesn't mind losing the headdress rule): say "'You're welcome to that unsightly thing, sir,' Delbin comments. 'Been trying to get rid of it for sometime.'" After showing the headdress to Delbin (this is the showing the headdress to Delbin is an unspoken question rule): try querying Delbin about the headdress instead. [Note that this must be converted to an instead rule if a generic life rule is created for Delbin.] After showing something to Delbin (this is the Delbin general response to being shown things rule): say "'A nice [noun] you've got yourself there.'" [Note that this must be converted to an instead rule if a generic life rule is created for Delbin.] After taking the rag when Delbin is at hand and the rag was unhandled (this is the Delbin has plenty of rags it seems rule): say "Delbin give you a curious look, but says nothing." After casting foblub at Delbin (this is the Delbin doesn't have a seat in which to be glued rule): say "You relate a fine sermon to Delbin about spirits -- both the liquid kind and the not-so-liquid kind. Were Delbin sitting rather than standing behind the bar, he might even be glued to his seat by now. 'A fine speech there, reverend.'" After casting espnis at Delbin (this is the bartenders are good at faking interest rule): say "You relate a dull sermon to Delbin about the various types of wooden casks used in brewing Mithicus beer. Delbin, being a bartender, is a good listener, and manages to stay awake." After greeting Delbin (this is the Delbin seems friendly enough rule): say "'Welcome to Delbin's, good sir.'" Every turn when Delbin is at hand and Delbin is in Delbin's pub (this is the Delbin occasionally cleans the glassware rule): if a random chance of 1 in 20 succeeds, say "Delbin cleans some glasses behind the bar." Chapter - Entrance to Flathead Stadium (Stadium_entrance, Stadium_entrance2) [Note that, in the original source code, this "location" is handled as two different rooms, one of which is a "past" version. Based on the leftover comments, this is most likely to simplify the "housekeeping" of the world state to prevent things like items left behind in the "present" from showing up in the "past". In the interest of being stubborn and/or foolish, this implementation treats them as a single location with necessary housekeeping rules.] Entrance to Flathead Stadium is a room. "[if Planting the Red Rod Piece is not happening]Here stands the entrance into the still popular Flathead Stadium, home to esoteric sports activities you never fully understood. Walkways lead southeast and southwest from here, or you can enter the stadium to the north[else]You appear to be in front of Flathead Stadium once again, however something seems different. Even the stadium itself seems dissimilar, newer. Walkways lie southeast and southwest from here, or you can enter the stadium to the north[end if]." It is northeast of Anthar West and northwest of Anthar East. Some walkways are an unimportant backdrop in Entrance to Flathead Stadium. Understand "walkway" as the walkways. After listening to Entrance to Flathead Stadium (this is the crowd noise is audible outside rule): say "You can hear the roars of a good crowd from inside the stadium. Must be playoff season." After listening to Entrance to Flathead Stadium during Planting the Red Rod Piece (this is the smaller crowd in the past rule): say "There is some crowd noise, but it is surprisingly quiet." To try out some synonyms for strange: say "A[one of] strange[or]n inexplicable[or]n indescribable[or] bizarre[or] curious[or]n extraordinary[or] fantastic[or]n odd[or]n outlandish[or] peculiar[or] remarkable[or]n unusual[or] weird[or] mystifying[or] perplexing[or]n uncanny[or]n author-laziness-induced[stopping] feeling compels you to stay." Instead of going southwest from Entrance to Flathead Stadium during Planting the Red Rod Piece (this is the sorry your grandfather could be out there rule): try out some synonyms for strange. Instead of going southeast from Entrance to Flathead Stadium during Planting the Red Rod Piece (this is the sorry your grandmother could be out there and even though it's not as famous of a paradox it's also a serious time travel hazard rule): try out some synonyms for strange. Instead of going from Entrance to Flathead Stadium to Upper Seats during Planting the Red Rod Piece (this is the it says you CAN enter the stadium to the north not that you SHOULD rule): say "As you head towards the entrance, a mob of crazed fans rushes out of the stadium. 'Isn't that Babe Flathead?' you hear someone scream, as you are trampled to death."; end the game in death. [Note: The following was written as an I6 Before property in the original code; it remains in this form because it is intended to allow the action to continue.] Before going from Flathead Stadium to Upper Seats the first time (this is the hand wave away lack of ticket-takers rule), say "You walk right into the stadium. The ticket-takers must be on strike or something." [Note: original code did not use first-time-only logic here] Section - Entrance to the Stadium A proxy entrance called an entrance to the stadium is in Entrance to Flathead Stadium. The relevant direction of the entrance to the stadium is north. Does the player mean entering the entrance to the stadium: it is likely. Section - Event Sign (stadium_sign) A fixed in place thing called an event sign is in Entrance to Flathead Stadium. "A stadium event sign is pasted to one of the stadium walls here." The printed name of the event sign is "stadium sign". The description of the event sign is "'Today's event:[line break]GOLEM FIGHTS!!![paragraph break]ALL CHALLENGERS WELCOME!!![line break]THREE ROUNDS, THREE BOUTS![line break]BIG CASH FOR THE WINNER![paragraph break](All Golems have undefeated records, so[line break]only trained golem-wrestlers need apply!)'". Understand "stadium sign" as the event sign. Section - Statue of Babe Flathead (stadium_statue) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'tampered with' is applied to the flag function now.] A fixed in place thing called a statue of Babe Flathead is in Entrance to Flathead Stadium. "A statue depicting the legendary Babe Flathead greets all visitors in front of the stadium." The description of the statue of Babe Flathead is "According to the inscription, this statue honors the legendary Babe Flathead." The statue of Babe Flathead can be tampered with. After looking under the statue of Babe Flathead when the statue of Babe Flathead is tampered with (this is the statue doesn't sit right when tampered with rule), say "Oddly, the statue seems to sit slightly tilted." [Note that the following is phrased as an instead rule to prevent short-circuiting of the action by the built-in rule preventing pushing of fixed in place things, but that a success is forced. Also note a slight deviation from the original source code's logic in that the presence of the red rod is confirmed before awarding points.] Instead of pushing the statue of Babe Flathead (this is the handle pushing the stadium statue rule): if the statue of Babe Flathead is tampered with: remove the statue of Babe Flathead from play; now the square hole is in Entrance to Stadium; if the red rod piece is in the square hole: accomplish red-rod-recovery; say "You give the statue a shove, and it wobbles and falls, breaking into useless dust! A passing sports fan notices your act of vandalism, and says to a friend, 'Look at that. The guy wins one bout of golem wrestling, and he thinks he's better than Babe Flathead.'"; rule succeeds; [this was a successful action] otherwise: say "The statue seems to be firmly fixed in place." Section - Square Hole (statue_base) [This object made use of the 'describe' property in the original code, but I'm not precisely sure why. The most logical-seeming speculation is that this routine was intended to prevent it from being treated like any other container (i.e. listing contents) in room descriptions. (Page 198 of the DM4 seems to address this.) However, playtesting of release 3/960606 shows that it is mentioned twice -- first the describe property is printed, then it gets its normal locale paragraph. This implementation attempts to honor the apparent intent of Mr. Yu, using an initial appearance property since the describe property is not exposed in I7.] There is an open container called a square hole. "In front of the stadium is a square hole." It is fixed in place. The square hole has carrying capacity 1. The size of the square hole is 15. The description of the square hole is "There's a large square hole in the ground near the front of the stadium." At the time when the stadium statue is installed: now the statue of Babe Flathead is in Stadium Entrance; now the square hole is off-stage; say "You hear voices behind you, and suddenly, a small crowd of people pass by, pushing a statue.[paragraph break]'Right there!' someone shouts, and a few people position the statue into the square hole. [run paragraph on]"; if the square hole is empty: say "It fits neatly into place."; otherwise: now the statue of Babe Flathead is tampered with; say "It fits, but seems just slightly tilted." Chapter - Upper Seats (Stadium_top) Upper Seats is a room. "You are near the cheap seats at the top of Flathead Stadium. The crowd is busy cheering whatever is going on down on the field. Looking at the field, you see two small dots. The Stadium exit is back south, or you can walk down to the front seats to the north." It is north of Entrance to Flathead Stadium and inside from Entrance to Flathead Stadium. The printed name of Upper Seats is "In Flathead Stadium, upper seats". A crowd is an unimportant backdrop in Upper Seats. Understand "fans" as the crowd. Some unimportant uniquely-named scenery things called some cheap seats is in Upper Seats. A field, and some dots are unimportant distant views in Upper Seats. Instead of going east in Upper Seats, say "You try to push your way through the fans, but fail." Instead of going west in Upper Seats, say "You climb over a few seats, but the crowd blocks any further progress west." After listening in the presence of the crowd (this is the crowd is quite noisy rule), say "The crowd is deafening." Chapter - Lower Seats (Stadium_bottom) Lower Seats is a room. "You are near the good seats in Flathead Stadium. The crowd is busy cheering for the current event on the field. Looking at the field, you see two large dots. The seats continue up and south, or you can walk down to the field below." It is down from Upper Seats and inside from Upper Seats. The printed name of Lower Seats is "In Flathead Stadium, lower seats". The crowd, the field, and the dots are in Lower Seats. [see "Upper Seats" for declaration of these backdrops.] Some unimportant uniquely-named scenery things called some good seats is in Lower Seats. [Note: burly man obstruction logic is in next section.] Instead of going east in Lower Seats, say "You try to push past a couple fans, but the rude looks make you stop." Instead of going west in Lower Seats, say "You try to push past a couple fans, but the angry looks make you stop." Section - Burly Man (burly_man) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'awe-stuck' is applied to the flag function now.] A man called a burly man is in Lower Seats. The description of the burly man is "A big man who's apparently into sports." The man can be awe-stuck. Instead of asking the burly man about "fight/game/fights/games/match/matches/golem/golems/special" (this is the he just loves the fights rule): say "'It's the three-golem special. One contestant versus three golems, one after the other. Great stuff!'" Instead of showing the champion's trophy to the burly man (this is the burly man is an early fan rule): create an expectant pause with the burly man asking the fan's challenge about a career; say "'You were amazing, pal. Ever think of going pro?'" The fan's challenge about a career is a binary reply. The positive rejoinder of the fan's challenge about a career is "'That's the spirit! You could be a contender!'" The negative rejoinder of the fan's challenge about a career is "'Well, you ought to, buddy. I've never seen fighting like that!'" This is the burly man default life behavior rule: say "'Give it a rest, pal. I'm watching the game.'" Instead of doing something when the current action is generic life behavior and the current action involves the burly man (this is the burly man generic life rule): abide by the burly man default life behavior rule. Persuasion rule for asking the burly man to try doing something (this is the reroute understood orders to burly man to generic life response rule): consider the burly man default life behavior rule; rule fails. Instead of going from Lower Seats to Near Locker Room when the burly man is at hand and the burly man is not awe-stuck (this is the burly man feels very entitled rule), say "The burly man jumps out of his seat as you try to pass. 'Hey buddy, I'm saving those seats.' He points to an entire row of seats below you. 'I've been waiting all season, and I don't want an obstructed view, so look for somewhere else to sit.' He sits back in his seat." After casting foblub at the burly man when the burly man is not awe-stuck (this is the stick 'em to it rule): now the burly man is awe-stuck; accomplish fan-bypass; say "You begin your sermon. The man starts to tell you to knock it off, but starts to listen with awe. As you finish, the man tries to get up to shake your hand, but realizes he is stuck fast. 'They gotta start cleaning these seats,' he says." After casting espnis at the burly man (this is the who can be bored at the big match rule): say "You begin a description of the 1700 different kinds of holy water, but the man is so enthralled with the game below that he just isn't paying attention." Chapter - Near Locker Room (Near_locker_room) [This room took advantage of its 'general' property in the original code, but the use of the flag seemed restricted solely to making sure the pale scroll is deposited here once. This implementation's logic relies on I7's internal state tracking to similar effect.] A room called Near Locker Room is down from Lower Seats and north of Lower Seats. "You are near a locker room under Flathead field. You can enter the locker room to the north, or start the climb back into the roaring crowd to the south." A crowd and a field are in Near Locker Room. [see "Upper Seats" for declaration of these backdrops.] Every turn when the location is Near Locker Room and the player had not been in Near Locker Room (this is the our hero is greeted in a hail of garbage rule): now the pale scroll is in the location; say "The front-row fans are getting a bit boisterous. Several of them throw garbage and paper debris towards the field. You notice something flutter down by your feet." Section - Southside Locker Room Entrance A uniquely-named proxy entrance called a southside locker room entrance is in Near Locker Room. The relevant direction of the southside locker room entrance is north. Section - Pale Scroll (pale_scroll) There is a scroll called a pale scroll. The pale scroll is inscribed with shazok. Chapter - Locker Room (Locker_room) A room called Locker Room is north of Near Locker Room. "You are inside a locker room under Flathead field. You can hear the crowds outside. The room is empty. There is an exit to the south, and the entrance to the field is to the north." The field is here. [see "Upper Seats" for declaration of this backdrop.] Some lockers are unimportant scenery in Locker Room. Understand "locker" as the lockers. After listening to Locker Room (this is the crowd noise penetrates locker room rule), say "You can hear the crowd outside." Section - Tough-Looking Coach (coach) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'vicariously victorious' is applied to the flag function now. Note: object's number property in the original code is omitted, as it seems redundant to other game logic. Also note that this object is given the I6 'transparent' property in the original source code, so he is declared "open-inventoried" here (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part). This is useful after the "wind up the match" routine. In addition, this person is given an initial appearance not found in the original, to help make sure that players notice the trophy he carries after winning the match. Finally, note that, in the original source code, this object includes an Order action section in its I6 'Life()' routine, which only intervenes in the case of an order to give the trophy to the PC. As a result, this specific action gets its own (unfortunately "Instead") rule and this person has a normal set of "generic life behavior" rules.] An open-inventoried person called a tough-looking coach is in Locker Room. The initial appearance of the tough-looking coach is "You can see a tough-looking coach here[if the coach carries the champion's trophy], cradling a trophy in one arm[end if]." The description of the tough-looking coach is "An old fellow with bushy eyebrows and a gruff demeanor. He's dressed like a sports coach[if the tough-looking coach is carrying the champion's trophy]. He proudly bears [the champion's trophy][end if]." The tough-looking coach can be vicariously victorious. The tough-looking coach can be acquainted with the PC. Understand "gruff" or "old" or "demeanor" or "fellow" as the tough-looking coach. Some bushy eyebrows are unimportant things part of the tough-looking coach. the tough-looking coach wears an unimportant thing called a stereotypical coaching outfit. [Note: As pointed out in original code, the following interactions should only be possible post-match due to preceding rules, so responses reflect this implicit context.] Instead of attacking the tough-looking coach (this is the old man's still got it rule): say "'You want a couple rounds with the old man, too? Well, I'm ready.' For an old coach, he still looks like he's in pretty good shape. You decide against violent action." [Note that the following is made into an early-interruption, no-lost-memorization instead rule, since it seems slightly more amusing that way.] Instead of casting a spell at the tough-looking coach (this is the coach interrupts spellcasting with encouragement rule): say "Before you finish the first few words, the coach interrupts. 'What's that you're saying? Speak up, I'm your coach, I'm here to listen.'" Instead of querying the tough-looking coach about the small cloth bag (this is the treat querying about bag as asking about winnings rule): try asking the tough-looking coach about "winnings" instead. Instead of answering the tough-looking coach that something (this is the coach doesn't go for that we-have-two-ears-but-just-one-mouth nonsense rule): say "The coach merely nods." [Note the difference between the asking it about action which will prevail when the trophy is not in scope and the querying it about action which will govern when it is. The asking it about response is not found in the original.] Instead of asking the tough-looking coach about "trophy" (this is the coach covets the trophy rule): say "'That's for winners. Get out there and win!'" Instead of querying the tough-looking coach about the champion's trophy (this is the coach admires the trophy rule): say "'It's a beauty all right.'" Understand "winnings" or "cut" or "his cut" or "prize" or "money" or "prize money" as "[prize money]". Instead of asking the tough-looking coach about "[prize money]" (this is the coach says just trust him rule): say "[if the small cloth bag is at hand]'It's all there, count it if you want[else]'Don't spend it all in one place, kid[end if].'" Instead of asking the tough-looking coach about "life/game/sport/sports/match/winning/advice" (this is the coach is the original philosopher rule), say "The coach looks momentarily reflective. 'Life is all about getting into the game,' he says. 'Remember that. It's not about winning or losing, but giving it your best shot.'" Instead of querying the tough-looking coach about a cereal-related thing (this is the treat asking coach about cereal as showing it to him rule): try showing the second noun to the tough-looking coach instead. Instead of showing a cereal-related thing to the tough-looking coach (this is the coach believes in breakfast of champions rule): say "'A bowlful of that each morning is bound to make a champion out of you.'" [Note that the following is phrased as an instead rule instead of what might more naturally be an after rule, because otherwise the 6G60 Standard Rule's "block giving rule" will halt the action.] [NOTE: uncommenting "tough-looking" in preamble of next rule caused a problem message.] Instead of the [tough-looking] coach giving the champion's trophy to the player (this is the old coaches never die they just go off-stage rule): now the player carries the champion's trophy; [note that inventory limits are not checked by this][IMPDO] say "The coach looks lovingly at the trophy, and then at you. 'Fair enough kid, you earned it.' he says, and gives it to you. 'I've seen a lot of golem-wrestlers in my time, but I gotta say, you're the best golem-wrestler I've ever seen.' He leaves the locker room to greet his fans."; now the tough-looking coach is off-stage; rule succeeds. [force success of action] This is the coach default life behavior rule: say "At the moment, it looks like the coach is too busy writing a Hall of Fame acceptance speech to pay you much attention." Instead of doing something when the current action is generic life behavior and the current action involves the tough-looking coach (this is the coach generic life rule): abide by the coach default life behavior rule. Persuasion rule for asking the tough-looking coach to try giving the champion's trophy to the player when the tough-looking coach is vicariously victorious and the tough-looking coach carries the champion's trophy (this is the coach knows who really won the match rule): persuasion succeeds. Persuasion rule for asking the tough-looking coach to try doing something (this is the reroute understood orders to coach to generic life response rule): consider the coach default life behavior rule; rule fails. [This is a tough match early in the game, so this implementation allows players a chance to back out instead of proceeding directly to the fight when they are "low-level" or hurt.] To decide if the coach thinks the PC is a weakling: if the maximum hit points of the player is less than 50, decide yes; if the current hit points of the player is less than 50, decide yes; decide no. To offer the coach's assessment: now the tough-looking coach is acquainted with the PC; if the coach thinks the PC is a weakling: say "[line break]His firm hand on your shoulder, the coach looks you up and down. 'You don't really look like champion material to me, kid. Are you sure you're up for this?'[paragraph break][italic type](It looks like he's waiting for you to say 'yes' or 'no'.)[roman type]"; if the player consents: say "'I like your moxie,' he growls, 'but it might not hurt to do a little praying before the match.'"; now Flathead Field is hosting a match; otherwise: say "He nods sagely. 'Why don't you come back after you've toughened up a bit -- get a little experience under your belt, first. So long, kid!' He quickly ushers you out the way you came in."; move the player to Near Locker Room; otherwise: now Flathead Field is hosting a match; if Flathead Field is hosting a match: say "[line break]The crowd roars a little more loudly as the golems' last opponent is carted off the field. 'Well, I hoped you're warmed up, [']cause you're up,' says the coach. He hustles you to the edge of the field, with one final push sending you stumbling forward and into the open.[paragraph break]'Remember,' he calls, 'these guys are tough, so give [']em your best stuff!'"; move the player to Flathead Field. Every turn when the tough-looking coach is at hand and the tough-looking coach is not vicariously victorious and Flathead Field is not hosting a match (this is the coach drafts the player rule): say "The coach looks up and notices you. [if the tough-looking coach is not acquainted with the PC]'Oh, you must be the replacement!' [else]'Hey! You're back!' [end if]he barks. He drags you over to the field entrance."; offer the coach's assessment. Every turn when the tough-looking coach is at hand and the tough-looking coach is not vicariously victorious and Flathead Field is hosting a match (this is the coach is determined to finish the match rule): say "The coach spots you the moment you walk into view. 'Where have you been?' he demands. 'The ref was about to default it to the golems!' He shoves you bodily back onto the field. 'Now get in there and make me proud!'"; move the player to Flathead Field. Every turn when the tough-looking coach is at hand and coach is vicariously victorious and the small cloth bag is off-stage (this is the coach delivers winnings after victory rule): say "The coach gives you a slap on the back that knocks the wind out of you. 'You did it! I didn't think you had it in you!' Here's the prize money,' he says, offering up a small bag[run paragraph on]"; now the small cloth bag is on-stage; silently try taking the small cloth bag; if the player carries the small cloth bag, say ", which you take"; say ". 'I went ahead and took out my cut, of course,' he adds."; if the small cloth bag is not carried by the player, say "[paragraph break]The coach, impatiently watching you juggle things around to try to make room for the bag, tosses it to your feet." Section - Champion's Trophy (trophy) [Note the change in this object's name compared to the original, to help the compiler differentiate between this and the trophy depressions.] There is a champion's trophy. It is scored. The size of the champion's trophy is 8. The description of the champion's trophy is "A lovely, grail-like, miniature gold and platinum trophy that looks very antique. The letter 'D' is inscribed on the side. You notice three odd bumps on the bottom of the circular base." Understand "gold" or "platinum" or "gold and platinum" or "lovely" or "miniature" or "grail-like" or "antique" as the champion's trophy. Section - Small Cloth Bag (win_bag) There is an open openable container called a small cloth bag. The carrying capacity of the small cloth bag is 50. The size of the small cloth bag is 15. The description of the small cloth bag is "A small cloth bag." Section - Ten Coins (c20, c21, c22, c23, c24, c25, c26, c27, c28, c29) [Note that c30 is declared but commented out in this part of the original source code. A different, uncommented declaration of c30 is found for use in the abandoned bank in Fublio Valley.] The small cloth bag contains 10 coins. Chapter - Flathead Field (Flathead_field) [This room took advantage of its 'general' property in the original code to indicate whether a game was in progress. The more descriptive label of 'hosting a match is applied to the flag function now.] Flathead Field is north of Locker Room. "You're on Flathead field, in front of millions of zany fans, a lifetime dream. Or not. Well, anyway, there's a locker room to the south." A field and a crowd are in Flathead Field. [see "Upper Seats" for declaration of these backdrops.] Flathead Field can be hosting a match. Instead of going south from Flathead Field when Flathead Field is hosting a match (this is the coach won't let you leave mid-match rule), say "You head for the showers, but the coach springs out and blocks your way. 'Come on kid, keep your head in the game.'" [Note: Original code generated a random number from 1 to 20 and used a switch on four values to indicate fan activity. This is modified to use a 1 in 5 chance (same frequency) and I7 features to give a better chance that all are seen.] Every turn when the location is Flathead Field and Flathead Field is hosting a match and a random chance of 1 in 5 succeeds (this is the Flathead Field crowd activity rule): say "[one of]Someone in the crowd yells out, 'Get him a body bag!' We assume he was referring to the golem, not you.[or]The crowd does 'the wave.'[or]The crowd waves some strange colorful objects. Rather distracting.[or]Someone in the crowd screams 'Flathead that golem!'[then at random]". Section - Northside Locker Room Entrance A uniquely-named proxy entrance called a northside locker room entrance is in Flathead Field. The relevant direction of the northside locker room entrance is south. Section - Referee (referee) [This object took advantage of the 'general' property in the original code. The more descriptive label of 'observing a match' is applied to the flag function now.] A man called a referee is in Flathead Field. The referee can be observing a match. The description of the referee is "A stout-looking man in a funny striped shirt." Understand "ref" or "stout" or "stout-looking" as the referee. The referee wears an unimportant thing called a striped shirt. Understand "funny" as the striped shirt. The referee wears an unimportant thing called a loud whistle. Instead of attacking the referee (this is the can't hurt the ref rule), say "Your opponent is the golem, not the referee." Instead of asking the referee about "time/timeout" (this is the no timeouts in golem fight rule), say "'Sorry, no timeouts!' the ref says." Instead of asking the referee about "foul/cheating" (this is the ref is typically observant rule), say "'It looked good to me.'" Instead of asking the referee about "round/match" (this is the ref will tell what round it is rule): if the wood golem is in Flathead Field, say "'You're in round 1.'" instead; if the stone golem is in Flathead Field, say "'You're in round 2.'" instead; if the iron golem is in Flathead Field, say "'You're in round 3, the final round.'" instead; say "'What do you mean? The match is over.'" This is the referee default life behavior rule: say "The ref makes some completely bewildering hand signal that could be an insult, for all you know about wrestling. In any event, nothing happens." Instead of doing something when the current action is generic life behavior and the current action involves the referee (this is the referee generic life rule): abide by the referee default life behavior rule. Persuasion rule for asking the referee to try doing something (this is the reroute understood orders to referee to generic life response rule): consider the referee default life behavior rule; rule fails. [The author's D&D sensibilities recoil at the idea of any golem other than the iron golem spewing poison gas, so the method of cheating is adjusted for the other golems in this implementation.] After casting espnis at the referee while the referee is observing a match (this is the can't bore your way out rule): let opponent be a random at hand golem; say "You start to relate the advantages of Bingo over Double Fanucci to the ref, and sooner that you can say 'Zounds,' the ref is fast asleep! Unfortunately, the golem takes advantage of this opportunity [if the opponent is the wood golem]to jab splinters under your fingernails. Howling helplessly in excruciating pain, you are quickly bludgeoned to death[else if the opponent is the stone golem]by scraping one forearm across the other, which sends thousands of tiny rock chips into your face. Blinded, you rub furiously at your eyes, which clear just in time for you to see the golem's fist before it connects with your head at a frightening speed[else if the opponent is the iron golem]and breathes poison gas at you. You reflect on this display of poor sportsmanship as you slowly lose consciousness[else]to cheat in a surprisingly effective way, killing you in the process[end if]."; end the game in death. Every turn when the referee is at hand and the referee is not observing a match (this is the ref starts observing when he sees the player rule): now the referee is observing a match; say "The ref blows his whistle and says 'Round 1.' The golem, not needing any encouragement, jumps into the fray." Section - Wood Golem (wood_golem) A golem called a wood golem is in Flathead Field. The printed name of the wood golem is "dangerous-looking wood golem". The current hit points of the wood golem is 20. The attack power of the wood golem is 15. The description of the wood golem is "The wood golem stands at about twice your height, an animated statue made completely of wood. He may move like an old cabinet, but watch those hands!" Every turn when the wood golem is at hand and the wood golem is hostile (this is the wood golem attack rule): let i be a random number between 1 and 13; [Note: comment in original code says 1 in 30 chance to hit but implemented logic says 1 in 13] if i is: [Note: original code attached response associated here with 1 to the impossible result of 20.] -- 1: say "The wood golem tries to move in for a clinch, and you dance away."; -- 10: say "The wood golem makes a lumbering swing at your head, and misses!"; -- 13: decrease the current hit points of the player by the attack power of the wood golem; if the current hit points of the player is less than 1: say "The wood golem jumps forward and flattens you, which feels similar to getting hit by a falling redwood tree."; end the game in death; otherwise: say "The golem staggers you with a punch that sends you reeling!"; -- otherwise: say "The wood golem makes a swipe for you, and misses." [Note that the following rule placement causes a slightly different behavior from the original Spiritwrak release 3/960606 -- namely that the golems do not attack on the first round they arrive. This is so that players who never discover how to increase their hit points (by praying) have a better chance of surviving if they have prepared all the necessary spells.] The golems turn hostile on sight rule is listed after the wood golem attack rule in the every turn rules. [Prevent lucky hit from killing player right off.] [IMPDO - Since all golems attack in a similar manner, create a single attack rule for all three golems with message variations? Then there can be just one rule placement statement, instead of one for each golem.] Instead of attacking the wood golem (this is the wood golem defense rule): if the wood golem is not hostile, now the wood golem is hostile; let i be a random number between 1 and 20; if i is at least 11: decrement the current hit points of the wood golem; if the current hit points of the wood golem is less than 1: say "With a thundering blow, you smash the golem into kindling!"; advance to the stone golem; otherwise: say "Good shot! You whack the golem, and splinters fly[if the current hit points of the wood golem is at least 11]. It didn't seem to slow him down, though[end if]."; otherwise: say "You swing, but miss." To advance to the stone golem: now the wood golem is off-stage; now the stone golem is on-stage; say "[line break]The ref says 'Knockout!' The crowd cheers in approval.[paragraph break]Several dwarves appear and cart the wood golem off. Unfortunately, a stone golem soon walks into view![paragraph break]The coach yells from the doorway 'You're doing great kid, just hang in there!'[paragraph break]The ref says 'Round 2!'" After casting egdelp at the wood golem (this is the wood golem is vulnerable to waxy buildup rule): say "The wood golem is immediately covered with a layer of waxy substance. Greatly embarrassed, it turns to call foul, and its feet slip beneath it! With a great thud, the golem hits the turf, knocking itself out cold."; advance to the stone golem. Section - Stone Golem (stone_golem) There is a golem called a stone golem. The printed name of the stone golem is "fierce-looking stone golem". The current hit points of the stone golem is 40. The attack power of the stone golem is 20. The description of the stone golem is "The stone golem is quite a towering piece of work. He looks like a crude statue made of animated granite. He probably has all the finesse of a giant boulder, so don't let him pin ya!" Understand "granite" as the stone golem. Every turn when the stone golem is at hand and the stone golem is hostile (this is the stone golem attack rule): let i be a random number between 1 and 13; [Note: comment in original code says 1 in 30 chance to hit but implemented logic says 1 in 13] if i is: [Note: original code attached response associated here with 1 to the impossible result of 20.] -- 1: say "The golem jabs with his left, and misses!"; -- 13: decrease the current hit points of the player by the attack power of the stone golem; if the current hit points of the player is less than 1: say "The stone golem jumps forward and flattens you, which feels similar to getting crushed by a giant boulder."; end the game in death; otherwise: say "The golem hits you with a punch that sends you reeling!"; -- otherwise: say "The golem tries to close, and misses." [Note that the following rule placement causes a slightly different behavior from the original Spiritwrak release 3/960606 -- namely that the golems do not attack on the first round they arrive. This is so that players who never discover how to increase their hit points (by praying) have a better chance of surviving if they have prepared all the necessary spells.] The golems turn hostile on sight rule is listed after the stone golem attack rule in the every turn rules. [Prevent lucky hit from killing player right off.] Instead of attacking the stone golem (this is the stone golem defense rule): if the stone golem is not hostile, now the stone golem is hostile; let i be a random number between 1 and 20; if i is at least 11: decrement the current hit points of the stone golem; if the current hit points of the stone golem is less than 1: say "With a thundering blow, you smash the golem into gravel!"; advance to the iron golem; otherwise: say "Solid blow! Stone chips fly[if the current hit points of the stone golem is at least 11]. It didn't seem to slow him down, though[end if]."; otherwise: say "You swing, but miss." To advance to the iron golem: now the stone golem is off-stage; now the iron golem is on-stage; say "[line break]The ref says 'Knockout!'. The crowd cheers in approval. Several dwarves appear and cart the stone golem off. Unfortunately, an iron golem soon walks into view! [paragraph break]The coach yells out from the safety of the locker room 'Okay kid, drop this golem, and we can celebrate.'[paragraph break]The ref yells 'Round 3!'" After casting tossio at the stone golem (this is the stone golem makes a nice pasta rule): say "The golem is quickly transformed into a mound of steaming linguine alfredo.[paragraph break]The ref yells 'Takeout!' and the crowd goes wild! Several dwarves appear and serve the pasta to the crowd on platters."; advance to the iron golem. Section - Iron Golem (iron_golem) There is a golem called an iron golem. The printed name of the iron golem is "deadly-looking iron golem". The current hit points of the iron golem is 50. The attack power of the iron golem is 30. The description of the iron golem is "The iron golem resembles a huge nightmare made out of iron. Towering at least 30 feet high, this animated iron statue isn't something you'd want to meet in a dark alley, much less in an arena filled with screaming fans." Every turn when the iron golem is at hand and the iron golem is hostile (this is the iron golem attack rule): let i be a random number between 1 and 13; [Note: comment in original code says 1 in 30 chance to hit but implemented logic says 1 in 13] if i is: [Note: original code attached response associated here with 1 to the impossible result of 20.] -- 1: say "The golem tries to flatten you, and you evade just in time!"; -- 13: decrease the current hit points of the player by the attack power of the iron golem; if the current hit points of the player is less than 1: say "The iron golem jumps forward and flattens you, which feels similar to getting mashed by a giant block of iron. Oww."; end the game in death; otherwise: say "The golem staggers you with a punch that sends you reeling! That felt quite painful."; -- otherwise: say "The golem tries to step on you, and you dodge." [Note that the following rule placement causes a slightly different behavior from the original Spiritwrak release 3/960606 -- namely that the golems do not attack on the first round they arrive. This is so that players who never discover how to increase their hit points (by praying) have a better chance of surviving if they have prepared all the necessary spells.] The golems turn hostile on sight rule is listed after the iron golem attack rule in the every turn rules. [Prevent lucky hit from killing player right off.] Instead of attacking the iron golem (this is the iron golem defense rule): if the iron golem is not hostile, now the iron golem is hostile; let i be a random number between 1 and 20; if i is at least 11: decrement the current hit points of the iron golem; if the current hit points of the iron golem is less than 1: say "With a thundering blow, you smash the golem into ball-bearings. The industrious stadium dwarves quickly snatch them up."; wind up the match; otherwise: say "Solid blow! You make a small dent[if the current hit points of the iron golem is at least 11]. It didn't seem to slow him down, though[end if]."; otherwise: say "You swing, but miss." To wind up the match: now the iron golem is off-stage; now the referee is off-stage; now Flathead Field is not hosting a match; now the tough-looking coach is vicariously victorious; now the tough-looking coach is carrying the champion's trophy; accomplish three-time-champ; say "[line break]The ref calls out 'The winner!' and holds your hand aloft. The crowd is on its feet! They'd probably be chanting your name, if they knew it.[paragraph break]The ref explains that the prize money and a championship trophy will be given to your coach, then exits the field." After casting bekdab at the iron golem (this is the iron golem is unusually vain rule): say "The golem suddenly develops many unsightly patches of rust. Mortified, the golem calls for his oil trainer, but to no avail! It soon falls apart into several rusty metal pieces, which are carted off by the stadium dwarves."; wind up the match. Part - Aragain City and Environs [ARAGAIN.INF] Chapter - Aragain North (ARAGAIN_GUSStop} Aragain North is a room. "You are just north of the newly-built Aragain City. The general vicinity is busy with important-looking people. A stairway goes down here, while a large walkway heads south into Aragain City proper." A walkway is an unimportant backdrop in Aragain North. The GUS Stop stairway is in Aragain North. [See "Entrance to Greater Anthar" for declaration of this backdrop.] The circular sign is in Aragain North. [See "Entrance to Greater Anthar" for declaration of this backdrop.] Section - Aragain Citizens [These background people are not given a separate existence in the original source code. They are given one here for consistency of the world-model.] Some unimportant scenery people called some Aragain citizens are in Aragain North. Understand "important" or "important-looking" as the Aragain citizens. Chapter - Aragain Entrance (ARAGAIN_Entrance) A room called Aragain Entrance is south of Aragain North. "Before you is a truly astounding sight. A huge metal gate to the south [if huge entrance gate is closed]blocks[else]frames[end if] the entrance into the newly built Aragain Royal Grounds. Worse yet, a seemingly endless line of people stands before the gate. They look like dignitaries, diplomats, or just plain politicians. A walkway heads north." The walkway is in Aragain Entrance. [Note: see "Aragain North" for declaration of this backdrop.] [Note: room synonym "pastries" in original code is handled with an unimportant thing carried by the line of well-dressed people, see next section.] Instead of going nowhere in Aragain Entrance when the noun is a cardinal direction (this is the not much to explore except Royal Grounds in Aragain rule), say "The only interesting place seems to be past that gate." Every turn when the well-dressed people are at hand and the guard is at hand and Expectant Pause is not happening (this is the cake line activity rule): let i be a random number between 1 and 25; if i is: -- 1: say "A couple of dignitaries from Gurth push their way to the front and present a flat object to the guard. The guard frowns incredulously. 'A fish cake? I don't think so.' The dignitaries return to the line."; -- 3: say "The guard paces back and forth."; -- 5: say "A representative from Borphee steps up and presents a pile of baked dough-bits on a plate to the guard. 'Frobolli cake, eh? Well, this may be popular where you come from, but it ain't popular here.' The representative huffs loudly and stomps away."; -- 7: say "The guard practices his menacing stares."; -- 8: say "The guard blows his whistle at some people in line."; -- 9: say "An official presents a nice morgia root pie to the guard. 'For cryin['] out loud -- a pie?!' the guard says, clearly exasperated. He points at the sign as the official departs. 'Cakes folks, we're taking C-A-K-E-S.'"; -- 11: say "The guard polishes a spot on his armor."; -- 13: say "Some dignitary presents the guard with a strange green cake with the words 'EAT ME' written on it in frosting. The guard smiles, cuts himself a piece, and suddenly stuffs it into the dignitary's mouth! 'You boys are going to have to do better than that,' he says to the now tiny dignitary, who scurries off."; -- 15: say "The guard hums a military dirge to himself."; -- 22: say "The guard grimaces, burps, and puts his hand momentarily to his belly. 'I swear, if I never see another cake...' you hear him mutter." Section - Line of Well-Dressed People (line1) [Note: This object was coded as both animate and concealed in the original code. The analogous treatment in I7 is to use person and undescribed. Also note the use of a token for the round pastries in the description, to mark them as mentioned and avoid triggering the list of carried things when examining the line of people.] Some undescribed plural-named open-inventoried people called some well-dressed people are in Aragain Entrance. The description of the well-dressed people is "A god-awful line of well-dressed people. You notice that many of them are holding what appear to be [round pastries] of some sort." The printed name of the well-dressed people is "well-dressed people". Understand "god-awful" or "dignitaries" or "diplomats" or "politicians" or "line" or "line of" as the well-dressed people. The well-dressed people carry some round pastries. The round pastries are unimportant. [Note: In original code, these are just a room synonym.] The well-dressed people wear some unimportant things called some fine clothes. This is the gate crowd default life behavior rule: say "No one in the line seems to be paying you any attention." Instead of doing something when the current action is generic life behavior and the current action involves the well-dressed people (this is the line of well-dressed people generic life rule): abide by the gate crowd default life behavior rule. Persuasion rule for asking the well-dressed people to try doing something (this is the reroute understood orders to gate crowd to generic life response rule): consider the gate crowd default life behavior rule; rule fails. After casting espnis at the well-dressed people (this is the can't bore your way through the line rule), say "A few people doze off as you canvass the line. They are quickly replaced by others." Section - Royal Decree (gate_sign) [This object took advantage of the 'general' property in the original code, but its only use was to modify the description on first examination. Here, appropriate I7 features are used instead.] A royal decree is here. "There is a large sign bolted to the gate." It is fixed in place. The description of the royal decree is "The sign reads:[paragraph break]'WELCOME TO ARAGAIN![paragraph break]As today (and everyday henceforth) has been decreed his Royal Lordship's birthday, we request that all visitors respect good King Sydney Flathead's wishes and present a cake appropriate for the occasion before entering.'[first time][paragraph break]Well, that's odd. If memory and Brother TuffBerry's Quendor History lessons serve, the Flathead family died off more than a hundred years ago.[only]". Understand "sign" as the royal decree. Section - Huge Entrance Gate (ARAGAIN_Entrance_gate) A locked door called a huge entrance gate is south of Aragain Entrance. "The massive gate is [if the huge entrance gate is open]open[else]closed[end if]." The description of the huge entrance gate is "A solid steel gate, probably 40 feet tall, complete with spikes at the top and close-set bars." Understand "massive" or "solid" or "metal" or "steel" or "spikes" or "bars" as the huge entrance gate. [Note: The original code provided this message to any attempt to close the gate, but not to open or push or pull it. The concept is made more general here.] Instead of opening or closing or pushing or pulling the huge entrance gate when the huge entrance gate is open (this is the gate is too heavy to move unassisted rule): say "It must weigh a ton, you can't seem to move it." Instead of opening or pushing or pulling the huge entrance gate when the guard is at hand and the guard is not satisfied with cake (this is the well walking right past him MIGHT have worked rule): say "The guard shoves you away as you approach the gate. He points at the sign. 'No cake, no castle.'" Section - Guard (Entrance_guardian) [This object made use of the 'general' property in the original code. A flag with the more descriptive label "satisfied with cake" is used here. Also, the object used the 'react_before' property to prevent the player from blowing the whistle in its vicinity. An I7 instead rule is used here, as the original does not allow the action to continue.] An open-inventoried man called a guard is in Aragain Entrance. "A tough-looking palace guard is standing by the gate." The guard can be satisfied with cake. The description of the guard is "Typical guard -- big, armed to the teeth, and with a sour disposition." Understand "guardian" or "tough" or "tough-looking" or "palace guard" as the guard. The guard wears an unimportant thing called a suit of plate mail. Understand "platemail" or "armor" as the suit of plate mail. The guard carries an unimportant thing called a shrill whistle. The guard carries an unimportant thing called a general-issue broadsword. Understand "sword" as the general-issue broadsword. Instead of blowing the plastic whistle while the guard is at hand (this is the can't cut in on the guard's action rule): say "The guard stops you as you are about to blow the whistle. 'I blow the whistles around here,' he says belligerently." Instead of attacking the guard (this is the attacking the guard is not wise rule): dissuade the player from attacking the guard. Instead of throwing something at the guard (this is the throwing things at the guard is not wise rule): dissuade the player from attacking the guard. To dissuade the player from attacking the guard: say "I'd advise against this; he probably knows 101 ways to dismember an opponent. Also, he's armed and encased in plate mail." [Due to the difference between the "querying it about" action and the "asking it about" action, several rules are installed here to allow asking about certain things to reroute to a general topic.] Instead of querying the guard about the well-dressed people (this is the treat querying the guard about the line as asking about entry generally rule): try asking the guard about "entry" instead. Instead of querying the guard about the royal decree (this is the treat querying the guard about the decree as asking about entry generally rule): try asking the guard about "entry" instead. Instead of querying the guard about the huge entrance gate (this is the treat querying the guard about the gate as asking about entry generally rule): try asking the guard about "entry" instead. The guard recognizes the royal palace and the young child. Instead of querying the guard about the young child (this is the treat querying the guard about Sydney as asking about entry generally rule): try asking the guard about "entry" instead. Instead of querying the guard about the royal palace (this is the treat querying the guard about palace as asking about entry generally rule): try asking the guard about "entry" instead. [The cake can be treated as either a general topic or the actual cake (if it's in scope).] Instead of asking the guard about "cake" (this is the treat asking the guard about cake in general as asking about entry generally rule): try asking the guard about "entry" instead. Instead of querying the guard about the cake when the guard does not bear the cake (this is the treat querying the guard about cake before delivery as showing the pan to the guard rule): try showing the pan to the guard instead. Instead of querying the guard about the cake when the guard bears the cake (this is the querying the guard about cake after delivery rule): if the guard is satisfied with cake: try asking the guard about "entry" instead; otherwise: say "'Sorry -- once you've submitted a cake for approval, you can't have it back.'" [The following behavior is modified slightly from the original to differentiate different relevant states.] Instead of asking the guard about "entry" while the guard is not satisfied with cake (this is the guard explains the entry requirement rule): say "'It's pretty simple. Give me a[if the guard carries the baking pan] proper[end if] cake, and you get in. The rules are posted right there.' He gestures towards the large gate sign." Instead of asking the guard about "entry" while the guard is satisfied with cake (this is the guard explains the PC can enter rule): say "The guard beams at you. 'You've qualified. Go right in!'" Instead of showing the baking pan to the guard (this is the guard isn't interested in just seeing a cake rule): if the cake is in the baking pan: say "The guard steels himself for yet another tasting. 'All right,' he says, 'hand it over already.'"; otherwise if the baking pan is empty: say "The guard is unamused. 'You're not the first guy to try the [']invisible cake['] bit. Take a hike, pal -- I've got work to do.'"; otherwise: say "The guard snorts. 'I don't have time for games, pal. Get a cake and get in line.'" Instead of giving the baking pan to the guard (this is the guard will accept only cakes rule): if the cake is not in the baking pan: create an expectant pause with the guard asking the guard's challenge about being wise; say "The guard looks at the pan, and hands it back. 'I don't see any cake. What are you, a wise guy or something?'"; otherwise: now the guard carries the baking pan; say "The guard grabs the pan, and, to your annoyance, cuts himself a massive slice of cake with his broadsword. The guard takes a bite [run paragraph on]"; follow the cake evaluation rule. The guard's challenge about being wise is a binary reply. The positive rejoinder of the guard's challenge about being wise is "The guard seems unamused." The negative rejoinder of the guard's challenge about being wise is "'Then knock off the nonsense and bring me a cake,' he says." [Note that the definition of the "cake-worthy" can be found in the section for the baking pan. Also note that this implementation of the cake allows for independent "doneness" and "foldedness" properties of the cake, so the logic of the guard's evaluation of the PC's baking skill is revised to reflect this.] This is the cake evaluation rule: let proper cake contents be {sack of flour, sugar cube, baking powder, corbie egg, dornberries, stick of butter}; [first look for improper ingredients] repeat with ingredient running through things part of the dough: if ingredient is not cake-worthy and ingredient is not edible: say "and you hear an unpleasant 'crunch.' He removes [an ingredient] from his teeth. 'What's this?' the guard snaps, clearly angry. 'I oughta report you to the Better Bakers Bureau.'"; rule fails; otherwise if ingredient is not listed in proper cake contents: say "and chews for a bit. His eyes widen, and he spits the cake out. 'Hey, pal, I taste [ingredient] in this so-called cake of yours! Grues could've done a better job than this!'"; rule fails; [second check that it was baked properly] if the baking level of the cake is done and the folding level of the cake is properly folded: do nothing; otherwise: say "and chews for a bit. He frowns. 'Sorry, pal -- this doesn't pass inspection. "; if the baking level of the cake is underdone: say "It could stand some more cooking.'"; else if baking level of the cake is overdone: create an expectant pause with the guard asking the guard's challenge about burning cake; say "Did ya burn it or something?'"; else if the folding level of the cake is underfolded: say "It'd make an okay pancake, though.'"; else if the folding level of the cake is overfolded: say "It's hard as a rock!'"; else: say "I can't quite put my finger on it, but it's just not right."; rule fails; [third make sure it includes everything it should] let proper cake contents be the list of cake-worthy things; [ say "(proper cake contents, before checking = [proper cake contents])";] repeat with ingredient running through things part of the dough: remove ingredient from proper cake contents; [ say "(proper cake contents, after checking = [proper cake contents])";] if the number of entries in proper cake contents is zero: [all necessary and sufficient ingredients included] now the guard is satisfied with cake; now the huge entrance gate is unlocked; now the huge entrance gate is open; accomplish royal-bakeoff; say "and smacks his lips. 'Finally, someone who can bake a proper cake!' He unlocks and signals to open the gate. 'You can pass.'"; rule succeeds; otherwise: say "and chews for a bit. He seems displeased. 'I don't know where you learned to bake, but there's definitely something missing here.'" The guard's challenge about burning cake is a binary reply. The positive rejoinder of the guard's challenge about burning cake is "The guard is angered. 'I don't like burned cake. The king don't like burned cake. Nobody likes burned cake, you dolt!'" The negative rejoinder of the guard's challenge about burning cake is "'Tastes burned to me,' he says, spitting crumbs." This is the guard default life behavior rule: say "The guard is amazingly good at ignoring distractions." Instead of doing something when the current action is generic life behavior and the current action involves the guard (this is the palace guard generic life rule): abide by the guard default life behavior rule. Persuasion rule for asking the guard to try doing something (this is the reroute understood orders to guard to generic life response rule): consider the guard default life behavior rule; rule fails. After casting a spell at the guard (this is the palace guard interrupts casting rule): say "The guard stops you in mid-chant by blowing a rather shrill whistle. 'None of that priest mumbo-jumbo on my watch!'" Chapter - Courtyard (ARAGAIN_Courtyard) Courtyard is a room. "You're standing in a lovely courtyard with magnificent topiary designs and real marble walkways. A large gate stands to the north. To the east is a red stone building with spires and columns. To the west is a large flat stone building. To the south is a huge entranceway into what must be the new Royal Palace, which appears to be carved out of the face of a massive mountain." It is south of the huge entrance gate. A massive mountain is unimportant scenery in Courtyard. The walkway is in Courtyard. [Note: See "Aragain North" for declaration of this backdrop.] Section - Topiary (topiary) A topiary is vegetable-like scenery in Courtyard. The description of the topiary is "Cleverly abused shrubs in the shape of giant crowns." Section - Red Stone Building A proxy entrance called a red stone building is in Courtyard. The relevant direction of the red stone building is east. Some spires and some columns are unimportant scenery part of the red stone building. Section - Flat Stone Building A proxy entrance called a flat stone building is in Courtyard. The relevant direction of the flat stone building is west. Section - Royal Palace A proxy entrance called a Royal Palace is in Courtyard. The relevant direction of the Royal Palace is south. Understand "entrance" or "entranceway" or "entryway" as the Royal Palace. Chapter - Royal Museum (ARAGAIN_Museum) Royal Museum is east of Courtyard. "You're in the entrance to a museum. The lighting is rather dim, throwing light shadows all over the walls. There are exhibit rooms to the north and south, or an exit west." Some lighting is an unimportant mass-nouned backdrop in Royal Museum. Understand "light" as the lighting. Some shadows are an unimportant backdrop in Royal Museum. Chapter - North Exhibit Room (Museum_north) [Note the slight change in game logic as compared to the original with respect to returning paintings to the museum. The event will occur on arrival instead of waiting for the player to drop it.] [IMPDO - add curator / investigators who hang around after theft and change return rule to curator at hand and curator can see painting?] North Exhibit Room is north of Royal Museum. "You are in a small exhibit room designed with a dark wooden floor and plaster-on-stucco walls. The room is dimly lit by hidden lamps or torches behind recessed wall niches. The exit is south." Some plaster and some stucco are unimportant mass-nouned scenery in North Exhibit Room. Some lamps, some torches, some niches, a dark wooden floor, and a museum wall are unimportant scenery in North Exhibit Room. The dark wooden floor is uniquely-named. A uniquely-named thing called the museum floor is unimportant scenery in North Exhibit Room. Understand "wood" as the dark wooden floor. [Note: The original source code's logic compared for the equivalent of the following rule generated a random number from 1 to 10 and showed a message on 2 or 7. The same frequency is preserved here.] Every turn when the location is North Exhibit Room and the glass barrier is in North Exhibit Room and The Thief is not in Delbin's Pub (this is the Thief lurks near painting rule): if a random chance of 1 in 5 succeeds, say "You get the odd feeling that there's someone behind you, but when you turn around, you see no one." To interrupt disruptive museum casting: say "From nearby, a museum curator walks up and abruptly stops your chant midway. 'Please don't disturb the other patrons,' he says and walks off. There doesn't seem to be anyone else around, however." After casting huncho at something in North Exhibit Room (this is the planely not the solution to the glass barrier rule): interrupt disruptive museum casting. After casting luncho at something in North Exhibit Room (this is the sure as heckfire not gonna bypass the barrier that way rule): interrupt disruptive museum casting. [Note that, in the original source code, the equivalent to the following logic sets the I6 initial appearance property of the object to nothing. This is emulated in I7 by setting the initial appearance text to "" (empty string). While it would also be possible to suppress the display of the initial appearance by changing the painting's handled property, this would have the undesired side effect of making it appear on the list of handled objects in response to the ">objects" command.] After blowing the plastic whistle in North Exhibit Room when the glass barrier is at hand (this is the glass barrier is susceptible to high-pitched noises rule): now the glass barrier is off-stage; say "You produce an extremely high-pitched noise. [if the glass barrier is undescribed]To your surprise, a near-invisible wall of glass to the north[else][The glass barrier] starts to vibrate, then[end if] shatters into a million little shards!"; if The Thief is not in Delbin's Pub: now the priceless painting is portable; now the priceless painting is in Workroom; now the initial appearance of the priceless painting is ""; [remove initial appearance, see note above] now the strange door is in North Exhibit Room; say "[line break]From out of the shadows steps the mysterious gentleman from Delbin's Pub. He performs a half-bow in your direction before deftly prying the painting off the wall. 'I'm a great appreciator of the arts, you understand,' he says, as, with a quick twist of his cape, he melds into the shadows and disappears with the painting.[paragraph break]As you reflect on the thief's actions, you can't help but notice that he apparently dropped something while making his dramatic exit." After going to North Exhibit Room when the player bears the counterfeit painting and the counterfeit painting is not stashed out of sight (this is the let's hope our priest protagonist is confused and not scheming rule): remove the counterfeit painting from play; say "A museum curator appears and takes the painting. With an expert eye, he looks closely at it. 'This is a fake! I warn you sir, art forgery is a dangerous game.' He leaves, much disgusted." After going to North Exhibit Room when the player bears the priceless painting and the priceless painting is not stashed out of sight (this is the fortunately the protagonist was not motivated by pecuniary considerations rule): now the priceless painting is in North Exhibit Room; now the priceless painting is fixed in place; now the initial appearance of the priceless painting is "The priceless painting is once again proudly displayed in its proper place."; now the priceless painting is not handled; [restore initial appearance display] now the player carries a random uncirculated coin; say "A museum curator appears and graciously takes the painting. 'Thank you for recovering this priceless work,' he intones gravely. He gives you a coin. 'The reward. We've been a little short on funds lately.'[paragraph break]With workman-like efficiency, the curator somehow attaches the painting to the north wall, then departs." Section - Glass Barrier (glass_wall) [The object has both the 'concealed' and 'static' attributes in the original code. The recommended option of using the scenery property in I7 in cases such as this would normally be followed here. However, defeating the glass barrier is one of the puzzles in the original code that seems unfair, in part because the 'concealed' property and limited response to reasonable actions makes it seem like a scenery object that cannot be manipulated directly. Along with many additional revisions to provide some much-needed hinting, the property is made 'fixed in place' and 'undescribed' here. This allows it to become 'described' when first discovered, giving it more prominence and encouraging investigation. It is also renamed to a "barrier" instead of a "wall" to avoid confusion with the museum wall the painting is somehow stuck to. Incidentally, getting these rules right really made me appreciate the power of Inform 7!] A glass barrier is in North Exhibit Room. "A nearly-invisible glass barrier bars access to the art on display." It is fixed in place and undescribed. The description of the glass barrier is "[first time]Yes, there's a glass barrier in front of the painting, all right. [only]It's exceptionally smooth and transparent[first time]; you didn't even notice its faint reflection at first[only]." Understand "invisible" or "nearly invisible" or "nearly-invisible" or "faint" or "reflection" or "glint" as the glass barrier. Before doing something when the glass barrier is undescribed and the current action involves the glass barrier (this is the seems the player already knows about the barrier rule): now the glass barrier is described; say "Your intuition tells you there must be something guarding such a priceless treasure, and your hunch is correct. So clean and transparent that it's almost invisible, a glass barrier surrounds the painting. [run paragraph on]"; Instead of attacking the glass barrier (this is the glass barrier can't be broken by brute force rule): say "Your blows have no effect, other than to cause a slight wobble in your reflection. It must be quite thick." Instead of throwing something at the glass barrier (this is the glass barrier is everything-proof when throwing rule): now the noun is in the location; say "[The noun] simply bounces off [if size of the noun is at least 16]-- briefly distorting the reflection -- [end if]and lands on the floor nearby. You inspect the spot where [the glass barrier] was struck, but there isn't even a scratch." Instead of doing something when the glass barrier is at hand and the glass barrier is undescribed and the current action involves the priceless painting (this is the interacting with the painting reveals the glass barrier rule): if the noun is the priceless painting: if the action requires a touchable noun: now the glass barrier is described; say "As you get close to the painting, you find yourself stopped by a nearly-invisible glass barrier."; otherwise: continue the action; if the second noun is the priceless painting: if the current action is throwing something at the priceless painting: now the glass barrier is described; now the noun is in the location; say "There is a loud 'thonk!' sound, and [the noun] is stopped mid-flight, landing on the floor. Your amazement is cut short when you notice a nearly-invisible glass barrier in front of the painting."; otherwise: if the action requires a touchable second noun: now the glass barrier is described; say "As you get ready to try [current action], a tiny glint in the air catches your eye. Your eyes refocus, and you notice a nearly-invisible glass barrier in front of the painting."; otherwise: continue the action. Instead of doing something when the glass barrier is at hand and the current action involves the priceless painting (this is the it's called a barrier for a reason rule): if the glass barrier is undescribed, abide by the interacting with the painting reveals the glass barrier rule; [Note: redundant?] if the action requires a touchable noun and the noun is the priceless painting: say "[The glass barrier] prevents any access to the painting."; else if the second noun is the priceless painting and the current action is not casting a spell at something: say "[The glass barrier] is in the way."; otherwise: continue the action. After jumping while the glass barrier is at hand and the glass barrier is described (this is the glass barrier is susceptible to resonance hint rule): say "You jump on the spot, noticing a tiny jiggle in the reflection coming from [the glass barrier]." After jumping while the glass barrier is at hand and the glass barrier is described at least twice (this is the glass barrier resonance isn't at low frequencies hint rule): say "You jump up and down repeatedly for a bit. It seems that very time you land, the reflection in [the glass barrier] is deformed for the briefest of instants." After searching the glass barrier (this is the hopefully the player remembers FMC goods are always flawed rule): say "Etched very faintly at one corner are the words:[paragraph break][fixed letter spacing] Another fine product of[line break]FROBOZZ MAGIC BARRIERS COMPANY[paragraph break] Protection Guaranteed[line break] ... by Magic!(SM)[variable letter spacing]" Section - Priceless Painting (Painting_REAL) [This object declared both the 'short_name' and 'plural' properties in the original code. I believe these niceties are handled automatically in I7, so they are left out here. Also note that the code preventing interaction when the glass barrier is present is superseded by the new rules in the preceding "Glass Barrier" section. Also note that this object used the I6 'general' attribute to track whether the player had found the hidden scroll. Here, I7's built-in state tracking is used for the purpose. In addition, note that some location-specific logic associated with this object in the original source code has been moved to rules in the applicable rooms here. Finally, note that this implementation gives the real painting the "fixed in place" property (equivalent to I6 'static' attribute) both because a) it's in keeping with the world-state as described by messages, and b) it helps in constructing rules that are not location-specific.] An artwork called a priceless painting is in North Exhibit Room. "There is a priceless painting hanging on the north wall." The priceless painting is fixed in place. The description of the priceless painting is "It's a beautiful oil painting of a dark stormy scene. On the horizon, you can see the edges of mountaintops. Near the top of the painting, two winged figures are carrying a lone individual towards a break in the clouds, where a bright white light seems to emanate." The size of the painting is 25. To act confused about which painting is genuine: say "They both look so genuine! You can't decide!" Instead of taking the priceless painting while the counterfeit painting is at hand (this is the can't take the real when you don't know which is counterfeit rule): act confused about which painting is genuine. To act uncertain about which painting to inspect: say "Search which one? Goodness, you can't decide!" Instead of searching the priceless painting while the counterfeit painting is at hand (this is the can't search the real when you don't know which is counterfeit rule): act uncertain about which painting to inspect. [Note the slight change of response compared to the original, to be more appropriate to different situations and to encourage discovery of the glass barrier.] Instead of searching the priceless painting when the priceless painting is fixed in place (this is the the painting has a visual detail found in searching rule): say "You notice a slightly loose part of the canvas in one corner[if the white scroll is handled], from where you plucked [the white scroll][first time]. Hopefully, no one else will notice[only][else], but you would need to take it down to investigate further[end if]." After searching the priceless painting when the priceless painting is not fixed in place and the white scroll is not handled (this is the it's not really art theft if it wasn't the part on display rule): now the player carries the white scroll; say "You notice a slightly loose part of the canvas in one corner. You carefully peel it away from the back, revealing a hidden scroll! Curious, you pluck it from its hiding place." Section - White Scroll (white_scroll) [Note that this object declaration is found in MIZNIA.INF in the original source code, but it has been moved here for convenient reference.] There is a scroll called a white scroll. The white scroll is inscribed with huncho. Section - Metal Plaque (Painting_plaque) [In the original code, this object was also protected by the glass wall. Since that protection had no game function and it would complicate the situation logic, the associated code is omitted here. To lend plausibility to the idea that it could escape the barrier's influence, its location is switched to the floor.] A metal plaque is in North Exhibit Room. "A metal plaque is embedded in the floor[if the priceless painting is at hand and the priceless painting is fixed in place] a few feet in front of the painting[end if]." It is fixed in place. The description of the metal plaque is "[fixed letter spacing][line break] 'ASCENDENCY'[line break]Leonardo Flathead, 777 GUE[variable letter spacing]" Chapter - South Exhibit Room (Museum_south) A room called South Exhibit Room is south of Royal Museum. "You are in a square exhibit room with wooden flooring and plain plaster walls. In the center of the room is an exhibit platform made from a large slab of marble. The room is lit brightly by hidden torches. The exit is north." An unimportant mass-nouned scenery thing called some wooden flooring is in South Exhibit Room. Some plain plaster walls and some hidden torches are unimportant scenery in South Exhibit Room. Understand "wood" as the wooden flooring. Section - Slab of Marble (Museum_dais) A scenery supporter called a slab of marble is in South Exhibit Room. "It's a large flat slab of marble, polished smooth, in the center of the floor." The carrying capacity of the slab of marble is 20. Understand "platform" or "dais" as the slab of marble. Section - Informative Plaque An informative plaque is fixed in place in South Exhibit Room. "An informative plaque is embedded in the floor in front of the slab." The description of the informative plaque is "[fixed letter spacing][line break] ANCIENT WOODEN VASE[paragraph break]This vase was reputedly obtained by[line break]a trader from natives of the jungles[line break]of Miznia. Although its age has been[line break]verified, neither the precise purpose[line break]nor origin of this curiosity is known.[paragraph break]The style of the artwork is a fine[line break]example of that seen in artifacts[line break]produced by the lost civilization[line break]that dominated this area between[line break]3,200 and 4,000 years ago.[variable letter spacing]" After examining the informative plaque (this is the reading the plaque reveals it is not a common flower vase rule): now the ancient wooden vase is inspected. Section - Ancient Wooden Vase (TEMPLE_Artifact) [Note that, although this object had an I6 'printed_name' property of "flower vase" in the original, it seemed fair to hint at the possible connection to the hidden ruins temple. As such, the printed name is made variable in this implementation, and the informative plaque in the preceding section is added. Also note that some logic in this object's I6 'before()' routine (I6 LetGo fake action section) has been moved to the section on the funnel-like opening.] An open container called an ancient wooden vase is on the slab of marble. "There's [an item described] sitting on the marble platform." The ancient wooden vase can be inspected. The printed name of the ancient wooden vase is "[if the ancient wooden vase is inspected]ancient wooden vase[else]flower vase[end if]". The carrying capacity of the ancient wooden vase is 1. The size of the ancient wooden vase is 10. The description of the ancient wooden vase is "An extremely narrow, short, wooden vase, possibly for holding long-stemmed flowers. It's clearly of ancient origin, well preserved, with strange carvings and designs of robed figures all over it." Understand "wood" as the ancient wooden vase. Rule for printing room description details of the ancient wooden vase (this is the tidy up ancient wooden vase room description details listing rule): stop. Instead of inserting something that is not a rod into the the ancient wooden vase (this is the only rods can be put into ancient wooden vase rule): say "Strangely, it doesn't quite fit." After examining the ancient wooden vase (this is the examining the vase reveals it is not a common flower vase rule): now the ancient wooden vase is inspected. Chapter - Warm Room (ARAGAIN_Gambit) A room called Warm Room is west of Courtyard. "You are in a long stone room, which is strangely warm. In the very center of the room is a hole, with a ladder down. An outdoor courtyard lies to the east." A view of the outdoor courtyard is an unimportant distant view in Warm Room. A maze ladder and a mysterious hole are unimportant backdrops in Warm Room. Section - Large Welcome Sign (Gambit_sign) A fixed in place thing called a large welcome sign is in Warm Room. "There is a large sign posted near the doorway." The description of the large welcome sign is "'Welcome to Barsap's Royal Gambit, a delight to entertain all guests to the Aragain Royal Grounds. Please consult your tourbook for rules and regulations regarding this area. His Royal Highness, Sydney Flathead, and those in his employ, cannot be held responsible for any accidents or minor spills at this location.'" Section - Lost-and-Found Box A fixed in place container called a lost-and-found box is in Warm Room. Chapter - Palace Entrance Hall (ARAGAIN_Palace) A room called Palace Entrance Hall is south of Courtyard. "A vast hall runs north and south in this massive palace. Royal trappings decorate the walls and ceiling, and red carpet lines the floor. A tremendous open archway exits to the north into a courtyard, while two open solid brass doors mark the entrance south into an audience chamber. Two smaller exits head east and west, towards stairways up and down respectively." East from Palace Entrance Hall is Royal Bedroom. West from Palace Entrance Hall is Palace Dungeons. Some royal trappings, a red carpet, and some stairways are unimportant scenery in Palace Entrance Hall. Understand "stairway" as the stairways. Some solid brass doors and a tremendous open archway are unimportant backdrops in Palace Entrance Hall. Understand "door" as the solid brass doors. The view of the outdoor courtyard is in Palace Entrance Hall. [ See "Warm Room" for declaration of this backdrop.] Chapter - Audience Hall (Palace_Audience) A room called Audience Hall is south of Palace Entrance Hall. "This is a giant audience hall, equivalent to a large auditorium with a throne on the stage. The hall is filled with luxurious decorations -- red carpeting, expensive chandeliers, sweeping gold-edged drapery. The hall is also currently filled with a large number of dignitaries and important-looking people taking up all the seats. Open brass doors lie to the north." A stage, some expensive chandeliers, and some luxurious seats are unimportant scenery in Audience Hall. Some red carpeting and some gold-edged drapery are unimportant mass-nouned scenery in Audience Hall. Understand "sweeping" as the gold-edged drapery. The solid brass doors are in Audience Hall. [See "Palace Entrance Hall" for declaration of this backdrop.] Section - People (audience_people) [This object had the 'concealed' attribute applied to it in the original code, presumably to prevent them from being mentioned in room descriptions. The Inform 7 "scenery" attribute is used here instead.] Some scenery people called some important-looking people are in Audience Hall. The description of the important-looking people is "Just your average throng of official-looking people. Interestingly, many of them seem to be smeared with flour." Understand "dignitaries" or "diplomats" or "audience" or "petitioners" or "smeared" or "throng" or "official-looking" as the important-looking people. Some unimportant things called some smears of flour are part of the important-looking people. Understand "smear" as the smears of flour. This is the audience default life behavior rule: say "The audience seems to be too busy waiting for something interesting to happen." Instead of doing something when the current action is generic life behavior and the current action involves the important-looking people (this is the Audience Hall dignitaries generic life rule): abide by the audience default life behavior rule. Persuasion rule for asking the important-looking people to try doing something (this is the reroute understood orders to audience to generic life response rule): consider the audience default life behavior rule; rule fails. After casting foblub at the important-looking people (this is the Audience Hall dignitaries are already glued to their seats rule): say "You give a marvelous sermon on patience. The audience seems glued to their seats, which changes little." After casting espnis at the important-looking people (this is the Audience Hall dignitaries are not easily bored rule): say "You give a rather overdone sermon on patience. A few people in the back rows drop off to sleep." Section - Throne (throne) [This object had the 'enterable' attribute applied to it in the original code, but I7 6G60 does not, by default, allow declaring a thing to be enterable when it is not a container or a supporter. It does not seem that gameplay would be harmed by declaring it a supporter, and it also seems possible players might try to interact with it like it is one, so it is treated as a supporter here.] An enterable scenery supporter called a large throne is in Audience Hall. The description of the large throne is "A large throne." Instead of entering the large throne (this is the you're no king rule): say "This is no time to be playing king." Section - Royal Magistrate (magistrate) [This object made use of a 'number' property in the original code, but the property was never observed in use. It is left out here.] An open-inventoried man called a magistrate is in Audience Hall. "A royal magistrate stands before the throne." The description of the magistrate is "A rather nasty-looking thin tall fellow with an evil grin." Understand "royal" or "thin" or "tall" or "nasty" or "nasty-looking" or "fellow" as the magistrate. An unimportant animal-like thing called an evil grin is part of the magistrate. Instead of attacking the magistrate (this is the imprison the player for attacking the magistrate rule): say "You move quickly, but from nowhere, two royal palace guards appear and wrestle you to the ground. 'Lock this fanatic up!' shouts the red-faced Magistrate."; imprison the player. Instead of throwing something at the magistrate (this is the imprison the player for throwing things at the magistrate rule): say "The magistrate dodges nimbly, and, from nowhere, two royal palace guards appear and wrestle you to the ground. 'Lock this fanatic up!' the Magistrate sneers."; imprison the player. Instead of casting a spell at the magistrate when the noun is not ledak (this is the using most magic on the magistrate will get you locked up rule): say "You start to chant, but the magistrate has sharp ears, and recognizes your magic. With a quick signal, two royal palace guards appear and wrestle you to the ground. 'Lock this babbler up!' he commands."; imprison the player. To imprison the player: now everything left behind when transported is in Royal Bedroom; [Note that includes the amulet, as in release 3/960606!] now the player is in the prison cell; now the prison cell is closed; if the prison cell is lockable: now the prison cell is locked; say "The guards strip you of your possessions and drag you down to the royal dungeons." [IMPDO - handle case where lock was broken before this event] Instead of showing or giving the ledger to the magistrate while the young child is not at hand (this is the magistrate wants the ledger rule): now the magistrate carries the ledger; [Note: in original code this was removed from play.] now the young child is in the Audience Hall; say "The Magistrate grabs the ledger and frowns as he reads it. 'Fine, you want a presentation?' He grabs a young boy who was hiding behind the throne and shoves him forward. 'Presenting his royal Highness, King Sydney Flathead, lost heir to the Flathead monarchy!'[paragraph break]The crowd reaction is somewhat mixed. 'Well, his head does look flat,' you hear one person say." Instead of showing or giving the shiny key to the magistrate (this is the magistrate wants the shiny key rule): now the magistrate carries the shiny key; [Note: in original code this was removed from play.] say "The magistrate snatches the key from your hand with surprising speed. 'I was looking for that!' he says." Instead of showing something to the magistrate (this is the magistrate's default shown things rule): say "'Oh, very interesting.' he says with heavy sarcasm." Instead of giving something to the magistrate (this is the magistrate's default given things rule): say "The magistrate waves you away with a bored look. 'I have no need for that.'" This is the magistrate default life behavior rule: say "The magistrate pays you absolutely no attention." Instead of doing something when the current action is generic life behavior and the current action involves the magistrate (this is the Audience Hall magistrate generic life rule): abide by the magistrate default life behavior rule. Persuasion rule for asking the magistrate to try doing something (this is the reroute understood orders to magistrate to generic life response rule): consider the magistrate default life behavior rule; rule fails. [Note: The original code's logic for this was a little different, it would generate a random number then check whether Sydney was present then route to one of two blocks, each with a response for a single number. This implementation will mimic the player-observable behavior of the original code, but it is structured differently, and it is not as flexible for adding new responses.] Every turn when the magistrate is at hand and the important-looking people are at hand (this is the occasional audience hall activity rule): if a random chance of 1 in 20 succeeds: if the young child is in Audience Hall: say "A diplomat approaches the little boy with a document. The Magistrate steps forward and stops him. 'Sydney is much too busy to bother with that.' the Magistrate says."; otherwise: say "An impatient diplomat shouts out, 'Bring out the King!'[paragraph break]The Magistrate smiles and says, 'Did anyone make a petition for a royal presentation?' The crowd is silent. 'I didn't think so.'" Section - Young Child (Sydney) [This object made use of the I6 'general' attribute in the original code to track whether the player had given Sydney a toy. The more descriptive 'befriended' is used here. This object was also given the I6 'transparent' attribute, so he is given the "open-inventoried" property here (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part). Note that the young child is given the "forged" attribute because the original source code indicated ledak should cause a reaction. Finally, note that, in the original source code, while this object did not have a 'default' section in its I6 'Life()' routine, the logic of the Answer and Order sections each had a catch-all response. This atypical setup means that some of the "generic life behavior" actions (namely, the I6 Wake and Kiss actions) respond with the verb defaults, confirmed as the way it actually works in Spiritwrak release 3/960606. For consistency with other NPCs and Sydney's apparent personality, he is given the normal complement of generic life behavior rules here, with the default I6 Order response chosen as the message.] There is an open-inventoried forged ledak-resistant man called a young child. The young child can be befriended. The description of the young child is "A little boy dressed in uncomfortable-looking frilly clothes[if the young child wears the red hat]. He's wearing a small red hat[end if]." Understand "boy" or "lad" or "kid" or "king" or "prince" or "Sydney" or "Flathead" as the young child. The young child wears some unimportant things called some frilly clothes. Understand "uncomfortable" or "uncomfortable-looking" as the frilly clothes. [Note the slight change in the wording of the message, since other observed uses of ledak destroy forgeries in the original.] The young child has some text called ledak-interaction event. The ledak-interaction event of the young child is "You notice a brief, uncertain, yellow glow around the young boy. The glow fades[if the magistrate is at hand]. The magistrates eyes cast about the room, seeking the source of the magic[end if]." [Note: in logical equivalent of the follow rule as seen in the original source code, these responses are reversed. However, that seemed out of place with the implicit meaning of the way the object's I6 'general' attribute was used, so it is changed here.] This is the Sydney nonconversation rule: if the young child is befriended: say "Young Sydney Flathead only shrugs."; otherwise: say "Young Sydney Flathead only tucks his head lower and whimpers."; rule fails. Instead of asking the young child about something (this is the Sydney isn't much of a conversationalist rule): abide by the Sydney nonconversation rule. Instead of telling the young child about something (this is the Sydney isn't much of a respondent rule): abide by the Sydney nonconversation rule. Instead of answering the young child that something (this is the Sydney doesn't react things said much rule): say "Young Sydney Flathead only stares at you." To punish the player for assaulting Sydney: now the young child is not befriended; say "The young boy screams in terror as you move to threaten him. (Shame on you!) Several guards appear out of nowhere, and club you to death for attempting regicide."; end the game in death. Instead of attacking the young child (this is the attacking the young boy is a capital offense rule): punish the player for assaulting Sydney. Instead of throwing something at the young child (this is the throwing something at the young boy is a capital offense rule): punish the player for assaulting Sydney. Instead of giving the stuffed toy alligator to the young child (this is the Sydney likes the stuffed toy rule): now the young child carries the toy alligator; now the young child is befriended; say "Tentatively, the boy takes the stuffed toy. You catch a glimpse of his sad smile as he holds it tightly." Instead of giving something that is not the toy alligator to the young child (this is the Sydney generic response to things given rule): say "Young Sydney cowers and shakes his head." Instead of asking the young child to try giving the red hat to the player when the young child is not befriended (this is the but sir this hat is all I have rule): say "Little Sydney shrinks back and holds on to his hat. He stares at you fearfully." Instead of asking the young child to try giving something that is not the red hat to the player (this is the generic asking Sydney to give something rule): say "Little Sydney shrinks back and stares at you fearfully." Persuasion rule for asking the young child to try giving the red hat to the player when the young child is befriended (this is the Sydney may be willing to do what he's asked to rule): persuasion succeeds. [Note that the following rule is an instead rule due to the presence of the "block giving" Standard Rule in 6G60. Note that it is linked to the action of Sydney giving the hat to the player, though, so the action must be attempted for this to be triggered (which means getting through persuasion and Sydney successfully removing the hat from his head first).] Instead of the young child giving the red hat to the player (this is the ask for the red hat and you shall receive rule): now the player carries the red hat; now the player carries the brown sphere; now the magistrate is off-stage; now the young child is authentic; [added for this implementation] now the young child is off-stage; say "Little Sydney smiles and removes the hat and hands it to you. You notice his head is actually round, and the hat was cleverly hiding this.[paragraph break]'He's no Flathead!' someone in the audience hall yells out. A distinct murmur of discontent rises from the crowd. The Magistrate slowly backs away. 'Wait! I can explain!' the Magistrate starts, but, as the crowd continues to advance , he turns and runs screaming out of the hall, several angry diplomats hot on his heels.[paragraph break]'Thank you, kind sir,' someone behind you says. You turn around. Little Sydney is happily in the arms of a kindly-looking couple. The woman continues. 'Our son was kidnapped, a little while ago. We've been waiting here, hoping to get him back. You did a very brave thing.'[paragraph break]The man steps forward, holding something out to you. 'A priest fellow just like you told me a long time ago that, one day, someone would help us in our time of need, and that I should give him this.' He gives you a strange round object. 'It's the least we can do.' he says. The couple leaves the hall, with the little boy laughing in their arms."; rule succeeds. [force success of action] This is the Sydney default life behavior rule: say "Sydney shakes his head fretfully." Instead of doing something when the current action is generic life behavior and the current action involves the young child (this is the Sydney generic life rule): abide by the Sydney default life behavior rule. Persuasion rule for asking the young child to try doing something (this is the reroute understood orders to Sydney to generic life response rule): consider the Sydney default life behavior rule; rule fails. After casting ledak at the young child (this is the you say impostor I say eh close enough rule): seek and destroy the young child. After greeting the young child when the young child is not befriended (this is the Sydney is a tragic figure rule): say "Young Sydney Flathead doesn't respond -- he seems to find you a bit frightening." After greeting the young child when the young child is befriended (this is the Sydney responds to greeting after befriended rule): say "'Hello,' the young lad says, somewhat shyly." Section - Red Hat (flat_hat) [Note: The original code specifies the 'clothing' attribute, but this I7 equivalent (the 'wearable' property) is automatically inferred when the object is declared as being worn.] A headpiece called a red hat is worn by the young child. The size of the red hat is 10. The description of the red hat is "A little red hat with no brim. It's unusually flat at the top." Understand "unusual" or "unusually" or "flat" as the red hat. Instead of wearing the red hat (this is the impersonating a Flathead won't work rule): say "It's too small for your head." Section - Brown Sphere (brown_sphere) There is a sphere called a brown sphere. The color of the brown sphere is "brown". Chapter - Royal Bedroom (Palace_office) A room called Royal Bedroom is up from Palace Entrance Hall. "This might have once been a lavish bedroom for royalty. At the moment, it seems like someone has converted it into a private lounge of some sort. A stairway heads down." A lavish bedroom stairway is unimportant scenery in Royal Bedroom. Section - Wooden Cabinet (Palace_cabinet) [This object made use of the 'general' property in the original code. It is replaced by a new flag property with the more descriptive label 'waxy' here. Also note that declaring a container locked automatically makes it openable and lockable in I7, so these attributes are left implicit.] A fixed in place locked container called a wooden cabinet is in Royal Bedroom. The initial appearance of the wooden cabinet is "[wooden cabinet appearance]". The wooden cabinet can be waxy. The size of the wooden cabinet is 20. The carrying capacity of the wooden cabinet is 20. The description of the wooden cabinet is "A rather new-looking wooden cabinet[if the wooden cabinet is waxy], with a bit of waxy build-up all over it[end if]." The wooden cabinet is unlocked by the shiny key. The wooden cabinet is linewriter-abusing. To say wooden cabinet appearance: if the wooden cabinet is closed: say "A wooden cabinet stands against one wall, clearly a new addition to the room.[line break]"; else: say "The wooden cabinet has been opened. "; if the wooden cabinet is empty: say "It seems to be empty."; otherwise: say "It contains:[paragraph break][Spiritwrak-style contents list for the wooden cabinet]". After casting egdelp at the wooden cabinet (this is the sometimes adventurers make life tough on the polishing staff rule): now the cabinet is waxy; say "The cabinet is covered in waxy build-up." Instead of opening the unlocked closed wooden cabinet (this is the sometimes you need more than a key rule): say "You give the cabinet a good tug"; if the wooden cabinet is not waxy: say ", but the cabinet doors barely budge. The new-looking wood seems to be rather tightly fitted."; otherwise: now the cabinet is open; say ". The well-waxed joints allow the doors to open with ease." Section - Warped Parchment (p6) A parchment called a warped parchment is in the wooden cabinet. The description of the warped parchment is "'...truth. In fact, the truth too terrible to believe, but believe it I must, for all the evidence I have found indicates that the Ancient Ones challenged the evil elementals and lost! Even with the Rod in hand, they were defeated by trickery. The Rod was broken and scattered into the world, but can be regained and rejoined by any whose heart and spirit are pure. Did the Ancient Ones forsake the spheres of...'". Section - Crumpled Scroll (crumpled_scroll) A scroll called a crumpled scroll is in the wooden cabinet. The crumpled scroll is inscribed with ledak. Chapter - Palace Dungeons (Palace_Westwing) A room called Palace Dungeons is down from Palace Entrance Hall. "Dark and spooky, the palace dungeons seem empty at the moment. The north portion of the room is sectioned-off by iron bars that form a makeshift cell." Instead of going north in Palace Dungeons (this is the going north in Dungeons is interpreted as entering the cell rule): try entering the prison cell instead. Instead of going inside in Palace Dungeons (this is the going inside in Dungeons is interpreted as entering the cell rule): try entering the prison cell instead. Section - Prison Cell (prison_cell) [Note the addition of the "lockable" property and the "unlocked" property (to prevent assumption it starts locked), which are not specified in the original. There is no unlocking key. (Yet?)] The prison cell is a fixed in place openable lockable unlocked transparent enterable container in Palace Dungeons. The initial appearance of the prison cell is "[prison cell appearance]". The size of the prison cell is 50. The description of the prison cell is "A cramped space with a wall of iron bars." Understand "bars" or "iron" or "makeshift" as the prison cell. The prison cell is linewriter-abusing. To say prison cell appearance: say "The cell [if the prison cell is open]stands open[else]is closed[end if]. "; [extra space at end of first sentence prevents unnecessary line break when not empty] if the prison cell is empty: say "[line break]"; otherwise: say "Inside you notice:[paragraph break][Spiritwrak-style contents list for the prison cell]". [A side note: It was quite puzzling that the logic in the original source code would return 2 in the response to the following command -- an unusual return value for an action in I6. After some searching through the DM4, it seems like this is probably related to the various return codes for attempts to go while in a container that are shown on p. 128. The value of 2 means that the I6 library should block the action but not print any message about the failure since the routine already should have done so.] Instead of going south while in the prison cell (this is the going south from the prison cell is interpreted as exiting rule): try exiting instead. Instead of going outside while in the prison cell (this is the going out from the prison cell is interpreted as exiting rule): try exiting instead. [Note the slight change in the following logic, as compared to the original, to use lockability as a flag that the cell has been rusted.] After casting bekdab at the prison cell (this is the prison cell lock is susceptible to rust rule): if the prison cell is locked: now the prison cell is unlocked; if the prison cell is lockable: now the prison cell is not lockable; say "The bars seem to rust a bit[if the prison cell is not lockable and the prison cell was lockable]. You hear a lock mechanism in the cell door break[end if]." Part - Barsap's Gambit [part of ARAGAIN.INF, GAMBIT2.INF, GAMBIT3.INF] [Here we have it, the obligatory old-school maze made *VERY* difficult in this case. A comment in the original code makes it clear this is completely intentional ("Okay maze-lovers, you asked for it -- Barsap's Gambit"). I guess technically it should be considered a large puzzle that looks like a maze, since the geography isn't really difficult to apprehend. I hated playing it, and you probably will, too, but it's a good programming challenge, so it will get implemented. Maybe this calls for a new trohsme ('bypass maze') spell? In which case this maze must have been constructed with the help of a niktolp spell. :) Barsap's Gambit is a complex implementation in the original Inform 5.5 version, and it is complex in this I7 incarnation. For whatever crazy reason, this was one of the first things I tackled, so it is not as elegantly-crafted (or even competently-crafted) as it might be. Have some patience in trying to understand it.] Section - Barsap's Gambit (the region) Barsap's Gambit is a region. A white stone cube and an underground chamber are unimportant backdrops in Barsap's Gambit. An unimportant mass-nouned backdrop called some red light is in Barsap's Gambit. Instead of going nowhere in Barsap's Gambit when the noun is a cardinal direction and the player is not gravity-resistant (this is the no path means no go rule): say "Plummeting to your death would be one solution to this challenge, but it's not one you're prepared to accept." Instead of going nowhere in Barsap's Gambit when the noun is a cardinal direction and the player is gravity-resistant and the location is not On-Beam (this is the no path means adventure rule): say "Trusting in the magic of the [italic type]feeyuk[roman type] spell, you step over the edge."; fall in Barsap's Gambit. Instead of going down in Barsap's Gambit when the large round hole is not at hand and the location is not On-Beam (this is the can't go through cubes rule): say "The white cube you are standing on offers no method of entrance." Instead of casting trohsme at something in Barsap's Gambit (this is the reroute directed trohsme to undirected trohsme when appropriate rule): try casting trohsme instead. After casting trohsme in Barsap's Gambit (this is the prevent new school-leaning players from giving up in disgust rule): say "The dull red glow becomes streakily intermixed with the darkness, the edges of the white cubes start to drip and run, and everything dissolves into a swirl of impressionistic color. When your vision clears, you find yourself someplace new...."; now Yu's revenge is true; move the player to Gambit_37. Test gambit with "take ebony beam / w / w / take pine beam from western niche / s / s / take ebony beam / e / w / take pine beam from western niche / remove balsa beam from northern niche / drop balsa beam / put pine beam in northern niche / n / n / w / e / remove balsa beam from southern niche / drop balsa beam / put pine beam in southern niche / s / s / remove balsa beam from southern niche / drop balsa beam / put ebony beam in southern niche / s / s / remove balsa beam from eastern niche / drop balsa beam / put ebony beam in eastern niche / e / e" Chapter - Special-Purpose Kinds Section - Maze Room Kind and Rules Maze level is a kind of value. The maze levels are first, second, and third. [Note: counting top level as first] A maze room is a kind of room. Every maze room is in Barsap's Gambit. A maze room has a maze level called level. A maze room has some text called internal name. The printed name of a maze room is "On Giant White Cube". The description of a maze room is "". A maze room has a container called special item destination. The special item destination of a maze room is usually the lost-and-found box. Before going to a maze room (called the entered room) (this is the make sure beams are seen in correct niches rule): [ say "Moving beams to closest side of path...";] repeat with checked niche running through maze niches in the entered room: [ say "[line break] niche = [checked niche]";] let checked path be a random potential maze path connected to checked niche; if checked path is nothing: [ say "[line break] path = NOT FOUND";] do nothing; otherwise: [ say "[line break] path = [checked path]";] let placed beam be a random maze beam that traverses checked path; if placed beam is nothing: [ say "[line break] no beam found to move";] do nothing; otherwise: [ say "[line break] moving placed beam = [placed beam]";] now placed beam is in checked niche. A top level maze room is a kind of maze room. "You are standing on a large floating white stone cube in a very large underground chamber. The entire place is dimly lit red from somewhere below." The level of a top level maze room is first. A middle level maze room is a kind of maze room. "You are on the surface of a floating stone cube. You can barely see another cube floating far above you in the dim red light that illuminates the entire area." The level of a middle level maze room is second. A bottom level maze room is a kind of maze room. "You are on the surface of a floating stone cube. The red light from below seems a bit brighter here." The level of a bottom level maze room is third. Section - Potential Maze Path Kind and Rules [Note that this implementation choice differs significantly from the original. Effectively, the world model contains doors linking each "on cube" location, but the player cannot traverse these doors unless a beam is installed in the niches on either side of the path. (Even if there is a beam, using the door whisks the player to the "on beam" location.) This approach helps a bit with the mapping function for the World display in the Index, but it doesn't really simplify things as much as I had hoped when I first thought it up.] A potential maze path is a kind of door. A potential maze path is always locked and undescribed and improper-named and privately-named. A potential maze path is usually closed. A potential maze path has some text called internal name. [for debugging] The internal name of a potential maze path is usually "*undefined*". The can't go through undescribed doors rule is not listed in the check going rulebook. [Hopefully, removing this rule won't cause any craziness; the use of the door kind for maze paths breaks the assumption motivating this standard rule.] Every turn (this is the potential maze paths are open only when traversed by potential beam rule): [ say "Checking maze path traversibility...";] repeat with checked path running through potential maze paths: if checked path is traversed by a maze beam: [ say "[line break] [checked path] is traversable.";] now checked path is open; otherwise: [ say "[line break] [checked path] is NOT traversable.";] now checked path is closed. Section - Maze Niche Kind and Rules (niche_class) Edge is a kind of value. The edges are northern, eastern, southern, and western. [Note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_niche," but, since use of this attribute was exclusively associated with objects of class niche_class, this is deemed unnecessary and omitted here in favor of testing for the niche kind when appropriate. Also note that the original source code specified maze niches as being open, but I7 assumes this by default. Also note that some I6 before() routines (for the I6 Receive action and LetGo fake action) that were associated with the niche_class in the original were relevant to the "double beam" world model implementation of the original (see notes for the "maze beam" kind for details), and they are omitted as unnecessary in this version. Also, note that some logic for the corresponding object in the original source code that is relevant to the I6 LetGo fake action is handled here with a rule for the taking action, due to the operation of the 6G60 Standard Rule "convert remove to take". Finally, the original source code declared the I6 properties 'counter_niche" and 'niche_dir' for use within this class. No direct equivalent is defined in this implementation; instead various new relations are used (see the Chapter "Special Purpose Relations" within this Part.] A maze niche is a kind of container. The carrying capacity of a maze niche is 1. A maze niche is always fixed in place. A maze niche has a direction called side. A maze niche has an edge. Understand the edge property as describing a maze niche. A maze niche has some text called internal name. [for debugging] The internal name of a maze niche is usually "*undefined*". The printed name of a maze niche is "[edge] niche". A maze niche is privately-named. Understand "niche" as a maze niche. A maze niche is always improper-named. The carrying capacity of a maze niche is always 1. The description of a maze niche is usually "It looks like a chiseled-out niche in the floor." The initial appearance of a maze niche is usually "There's a square niche in the [edge] edge of the floor here[unless the item described is empty]. Resting in the niche is [a random thing contained by the item described] that extends into the darkness[end if]." The size of a maze niche is usually 35. [must be large enough to accept maze beams] [Since the compiler is rejecting attempts to get it to understand the side property as describing a maze niche (forbidden kind?), the edge property was created to make it easier to declare maze niches. However, the edge property is not a direction, and actual directions have many uses in this scenario, so the idea here is to get the machine to do the work of applying the right direction to each maze niche based on the edge it was declared with.] When play begins (this is the initialize maze niches rule): repeat with checked niche running through maze niches: let declared edge be the edge of checked niche; if declared edge is: -- northern: now the side of checked niche is north; -- eastern: now the side of checked niche is east; -- southern: now the side of checked niche is south; -- western: now the side of checked niche is west. Instead of taking a maze niche (this is the niches aren't really things to take rule): say "The niche, being more defined by its absence than presence, cannot be taken." Instead of inserting something that is not a maze beam into a maze niche (this is the restrict maze niche contents to maze beams rule): say "That's not going to stay in the niche." Instead of inserting a maze beam into a maze niche that is not empty (this is the only one maze beam per maze niche allowed rule): say "The niche space is currently full." After inserting a maze beam into a maze niche (this is the describe placing a maze beam into a maze niche rule): say "You carefully place one end of the beam in the niche and extend the other end into the darkness[one of]. You feel something solid support the far end[or]until slides into place[stopping]." Section - Maze Beam Kind and Rules (wood_beam_class) [Note that the original implementation created a wood_beam class and then three derivative classes, one for each type of wood. Since the behavior differences are small, this implementation uses one kind with an associated wood type property to simplify things a bit.] Wood type is a kind of value. The wood types are ebony, pine, and balsa. [Note that the original source code specified two wooden_beam-type objects for every one created in this implementation. The reason is the way that a beam's simultaneous "presence" in two maze niches was handled -- a beam object not in a niche contained a secret "double" inside it; when put into a niche, the double would be moved to the "counter-niche" so it would be there when the player walked across; when picked up, the double would be again stashed back into the "regular" beam, with a swap being executed if the object actually picked up was a "double". I thought that was a little ugly relative to what could be accomplished in I7 (though very functional and elegant for I5.5!) and I wanted to do something clever with relations as a more elegant alternative (see next chapters). I'm not sure I succeeded, other than perhaps marginally improving the readability of the code. Also note that the original source code declared one of the limited number of I6 object 'attribute's to be "is_wood_beam," but, since use of this attribute was exclusively associated with objects derived from the class wood_beam_class, this is deemed unnecessary and omitted here in favor of testing for the maze beam kind when appropriate. Finally, note that the size of things of this kind has been modified to 35, down from the original source code's value of 50.] A maze beam is a kind of thing. The printed name of a maze beam is "[wood type] beam". The printed plural name of a maze beam is "[wood type] beams". A maze beam is always improper-named and privately-named. A maze beam has a wood type. A maze beam has a number called remaining uses. The remaining uses of a maze beam is usually -1. A maze beam has some text called internal name. [for debugging] The internal name of a maze beam is usually "*undefined*". The description of a maze beam is "A long, thin [wood type]-wood beam." The size of a maze beam is usually 35. [must be small enough to fit into a maze niche] Understand "wood beam" or "wooden beam" or "beam" as a maze beam. Understand "wood beams" or "wooden beams" or "beams" as the plural of maze beam. Understand the wood type property as describing a maze beam. [IMPDO - figure out how to get a prompt for taking a beam when multiple identical beams are available; right now just defaults to "first" (leftmost?) in tree. Can create an understand line that allows a property from another object (e.g. edge of the containing niche) as referring to a maze beam?] When play begins (this is the initialize maze beams rule): [ say "Initializing maze beams: ";] repeat with item running through maze beams: if the wood type of item is: -- ebony: now the remaining uses of item is 2; -- pine: now the remaining uses of item is 1; -- balsa: now the remaining uses of item is 0; [breaks on first use] if item is in a maze niche (called containing niche): let path occupied be a random potential maze path connected to the containing niche; [should only be one] now item traverses the path occupied. [ say "[line break] [item] [internal name of item] set to [remaining uses of item] uses, traversing path [list of potential maze paths traversed by item] between [list of maze niches connected by potential maze path traversed by item]".] [The idea of the following is to alert players to some syntax that can be helpful in the maze. Its function depends on a new activity defined to mark out the boundaries of a removing it from action. See the section for "Removing It From" for details.] Definition: a maze beam (called target) is duplicative rather than unique: repeat with checked timber running through touchable maze beams that are not target: if the wood type of checked timber is the wood type of target: decide yes; decide no. Beam specificity advisory is a truth state that varies. When play begins (this is the force beam specificity advisory flag to false rule): now beam specificity advisory is false. Before taking a duplicative maze beam when beam specificity advisory is false and the multi-removing activity is not going on (this is the advise about taking specific beams when applicable rule): say "[italic type](Since every [noun] looks the same, you just grab [if the holder of the noun is the location]one from the floor[else]the one in [the holder of the noun][end if]. To be specific about a beam, use a command like:[roman type] >TAKE PINE BEAM FROM NORTHERN NICHE[italic type] or[roman type] >GET BEAM LOCATED IN EASTERN NICHE[italic type] or [roman type] >PUT PINE BEAM WITHIN EASTERN NICHE INTO SOUTHERN NICHE[italic type]. Also, the words 'held' and 'carried' can be used to refer to an item inventory, and 'here' or 'discarded' can be used to refer to an item in the same location as you are but not in or on anything else.)[roman type][paragraph break]"; now beam specificity advisory is true. After casting egdelp at a maze beam (this is the beam-waxing rule): if the location is On-Beam and the second noun is the supporting beam: say "[The second noun] is covered in a waxy film! Your feet immediately lose their purchase on it."; now suppress every turn breakage check is true; [prevent double application of breakage check logic] fall in Barsap's Gambit; otherwise: say "[The second noun] is covered in a waxy film! Thinking better of this, you hastily wipe off the offending build-up." After casting huncho at a maze beam (this is the plane shifting beams up rule): say "In a blaze of actinic light, [the second noun] vanishes!"; if the location is On-Beam and the second noun is the supporting beam: now suppress every turn breakage check is true; [prevent double application of breakage check logic] fall in Barsap's Gambit. After casting luncho at a maze beam (this is the plane shifting beams down rule): say "With a puff of dark smoke, [the second noun] disappears!"; if the location is On-Beam and the second noun is the supporting beam: now suppress every turn breakage check is true; [prevent double application of breakage check logic] fall in Barsap's Gambit. Every turn while in Barsap's Gambit (this is the update maze beam traversal relation rule): repeat with checked beam running through on-stage maze beams: if checked beam traverses nothing and checked beam is in a maze niche (called containing niche): let path occupied be a random potential maze path connected to the containing niche; [should only be one] now checked beam traverses the path occupied; [ say " ([checked beam] now traversing [path occupied]) ";] otherwise if checked beam traverses a potential maze path and checked beam is not in a maze niche and checked beam is not in On-Beam: [ say " (resetting [checked beam] to traverse nothing)";] now checked beam traverses nothing. Chapter - Special Purpose Relations Section - Underlying Underlying relates one potential maze path to one potential maze path. The verb to underlie (it underlies, they underlie, it is underlain, it is underlying) implies the underlying relation. [Note: synonymous phrase "to be below" is unavailable due to conflict with current version of standard rules.] Section - Connecting Connecting relates one potential maze path to various maze niches. The verb to connect (he connects, they connect, he connected, it is connected) implies the connecting relation. The verb to be connected to implies the connecting relation. Section - Traversing Traversing relates one maze beam to one potential maze path. The verb to traverse (it traverses, they traverse, it is traversed, it is traversing) implies the traversing relation. Chapter - On-Beam Room (GAMBIT_W1, GAMBIT_W2, GAMBIT_W21, GAMBIT_W22, GAMBIT_W31, GAMBIT_W32) [This was originally implemented as 6 separate rooms with specific rooms for both north-south travel and east-west travel on each of the three levels of the maze. Because the maze is complicated enough already, this implementation tries to collapse them into one. Note that two of the global variables declared in the original source code, WN_TO (presumably "west/north to") and ES_TO ("east/south to") are used by the CheckGambit() routine to stash the correct maze locations that would be on either end of a stood-upon wooden beam. This implementation simply varies map connections to the single room, so no direct equivalent of these variables is needed. Also note that the GAMBIT_W31 and GAMBIT_W32 locations made use of the I6 'general' attribute to track whether the amulet's warning flash message had been shown there. Logic in each location checked the other's state to ensure that the message was shown only once. It would have been preferable to use I7's built-in state tracking mechanisms to fulfill the same role, but, due to the mutable nature of this room's location, this did not seem possible. Here, the "scried" property of the fire spirit is used to track the first amulet warning.] There is a room called On-Beam in Barsap's Gambit. On-Beam has a potential maze path called path being traveled. On-Beam has a maze level called level. The printed name of On-Beam is "Balancing on [a supporting beam]...". The description of On-Beam is "You're walking along a very narrow [supporting beam] that runs [list of valid directions] into darkness. [if level of On-Beam is first]Below[else if level of On-Beam is second]Both above and below[else]Above[end if], you can see the dark silhouette of a network of beams and floating cubes. From [if level of On-Beam is first]much farther below[else if level of On-Beam is second]farther below[else]below[end if] comes a [if level of On-Beam is first]faint [else if level of On-Beam is second]dull [else][end if]red glow." Some darkness is an unimportant mass-nouned backdrop in On-Beam. A network of beams, a dark silhouette, some floating cubes, and a dull red glow are unimportant distant views in On-Beam. To decide which maze beam is the supporting beam: let perch be a random maze beam traversing path being traveled of On-Beam; if perch is not nothing: decide on perch; else: [presumably trying to print the room name while not in it, or an unexpected state due to programming error] say "(oops, substituting default) [run paragraph on]"; decide on default value of maze beam. Instead of going nowhere in On-Beam when the noun is a cardinal direction (this is the count going wrong direction as deliberately stepping off beam rule): say "Trying not to think too hard about what you are doing, you step off the beam."; now suppress every turn breakage check is true; [prevent double application of breakage check logic] fall in Barsap's Gambit. Instead of going down in On-Beam (this is the deliberately stepping off the beam rule): say "You bravely step off of the beam and into the void."; now suppress every turn breakage check is true; [prevent double application of breakage check logic] fall in Barsap's Gambit. Instead of jumping in On-Beam (this is the but you have so much to live for such as this maze rule): say "You hop from the beam and begin to fall."; now suppress every turn breakage check is true; [prevent double application of breakage check logic] fall in Barsap's Gambit. Instead of dropping something in On-Beam (this is the Barsap's Gambit is cruel enough without destroying things rule), say "[one of]Although Brother Afgencapp's lessons on navigating mazes spring to mind, your intuition tells you that d[or]D[stopping]ropping [the noun] here would probably result in losing both [object pronoun of the noun] and your balance." Instead of taking or cutting a maze beam not enclosed by the player while in On-Beam (this is the can't deliberately remove the beam we're pretending player is on rule): say "You rethink that idea immediately." Instead looking under a maze beam not enclosed by the player while in On-Beam (this is the can't resist a little pun rule): say "The yawning abyss beneath you leaves plenty of room for terror." Instead of examining or turning or searching or rubbing or attacking or pushing or pulling a maze beam not enclosed by the player while in On-Beam (this is the interaction with stood-upon beam is limited rule): say "Perhaps this is not the best moment to try that." Instead of taking something not enclosed by the player while in On-Beam (this is the can't take anything else in On-Beam rule): say "Other than what you have on your person, the beam you're on is the only thing within reach." Before going through an open potential maze path (called intended path) when the player is not gravity-resistant (this is the no beam can support the PC's full weight rule): let checked beam be a random maze beam traversing the intended path; if checked beam is not nothing: now the remaining uses of the checked beam is zero. Before going through a potential maze path (called intended path) (this is the prepare the On-Beam Room before entering potential maze paths rule): clear any beam from On-Beam; now On-Beam is not visited; [Note: original code did this -- to help give the illusion that it's really several rooms?] [ say "[line break]Preparing On-Beam room...";] [ say "[line break] intended path = [intended path] ([list of maze niches connected by intended path])";] now the level of On-Beam is the level of the location; [ say "[line break] current level set to [level of On-Beam]";] let near niche be a random local maze niche connected by intended path; [should only be one] [ say "[line break] near niche = [near niche] / side = [side of near niche]";] let far niche be a random non-local maze niche connected by intended path; [again, should only be one] [ say "[line break] far niche = [far niche] / side = [side of far niche]";] reset On-Beam exits; change the opposite of side of near niche exit of On-Beam to the location; [if player goes back] change the opposite of side of far niche exit of On-Beam to the location of far niche; [if player goes forward] now the path being traveled of On-Beam is the intended path; let relocated beam be a random maze beam traversing the intended path; [ say "[line break] relocated beam = [relocated beam] [internal name of relocated beam]";] now the relocated beam is in On-Beam. [will be moved again on exit at either end] [ say "[line break]On-Beam is prepped!"] The make sure beams are seen in correct niches rule is listed before the prepare the On-Beam Room before entering potential maze paths rule in the before rules. [If other way around, beam being crossed will end up in room at other side of path.] To reset On-Beam exits: repeat with checked side running through directions: change the checked side exit of On-Beam to nothing. Before going through a closed potential maze path (this is the can't traverse paths without beams rule): if the player is not gravity-resistant: say "The vast empty space in that direction dissuades you."; stop the action; otherwise: say "You decide to put [italic type]feeyuk[roman type] to the test and resolutely step over the edge."; fall in Barsap's Gambit. Instead of going through an open potential maze path (this is the On-Beam Room is between maze rooms rule): move the player to On-Beam. Rule for writing a paragraph about a maze beam (called beam stood upon) traversing the path being traveled of On-Beam while in On-Beam (this is the convey idea that player is actually on the beam rule): say "The minuscule width of [the beam stood upon] beneath your feet leaves little room for error." To decide whether (D - a door) connects to (R - a room): if the front side of D is R or the back side of D is R: decide yes; otherwise: decide no. Every turn when the location is On-Beam and the path being traveled of On-Beam connects to Gambit_37 and the fire spirit is unscried (this is the warn player about upcoming fire spirit encounter rule): signal proximity to an unholy artifact guarded by the fire spirit. The warn player about upcoming fire spirit encounter rule is listed after the check for beam breakage rule in the every turn rules. [For last placement of the "purple flash" message in the turn's output.] Section - Falling Rules (CheckGambit function) [Note: This behavior is somewhat different from the original (in which breakage would happen as soon as the player exited the cube, but the player could linger on the beam as long as he or she liked). Since this implementation describes the breakage as happening while on the beam, it seems more dramatic to let the beam degrade while standing on it. It shouldn't make it any more difficult as a puzzle, and may help players identify the relative strengths of the various kinds of wood in initial experimentation. Originally written as one big rule following the model of the original source code's 'CheckGambit()' function, this was later restructured to a rulebook for easier comprehension and modification.] Suppress every turn breakage check is a truth state that varies. Suppress every turn breakage check is false. Every turn while the location is On-Beam (this is the check for beam breakage rule): if suppress every turn breakage check is true: now suppress every turn breakage check is false; rule fails; [stop rule processing without halting every turn rulebook processing] otherwise: let tested beam be a random maze beam in the location not enclosed by the player; [should always be only one] if the remaining uses of the tested beam is: -- 2: decrement the remaining uses of the tested beam; say "[The tested beam] crackles alarmingly under the stress of holding you up."; -- 1: decrement the remaining uses of the tested beam; say "[The tested beam] emits a sharp 'crack!', and you feel it give the tiniest bit. Your heart hammers in your chest."; -- 0: say "[The tested beam] breaks beneath you with a shuddering crack!"; remove tested beam from play; fall in Barsap's Gambit. To fall in Barsap's Gambit: follow the falling in Barsap's Gambit rules. [IMPDO - Generalize to cover jumping from beam or cube, going over non-bridged edges of cube, etc.?] Falling in Barsap's Gambit is a rulebook. The falling in Barsap's Gambit rulebook has a maze level called the level fallen from. The falling in Barsap's Gambit rulebook has a potential maze path called the path below. The falling in Barsap's Gambit rulebook has a maze beam called landing site. First falling in Barsap's Gambit (this is the housekeeping before the fall rule): now the level fallen from is the level of the location; if the location is On-Beam: clear any beam from On-Beam; now the path below is a random potential maze path underlying the path being traveled of On-Beam; now landing site is a random maze beam traversing the path below. Falling in Barsap's Gambit when the player is not gravity-resistant (this is the without gravity resistance the end is quick rule): say "You plummet quickly through the air, "; if level fallen from is: -- first: say "flash past two more levels of floating cubes and beams, "; -- second: say "flash past another level of floating cubes and beams, "; say "and find the bottom of the chamber is filled with red-hot lava..."; end the game in death. Falling in Barsap's Gambit when the player is gravity-resistant and the location is not On-Beam (this is the with gravity resistance the end is slow rule): say "You float gently down "; if level fallen from is: -- first: say "past two more levels of floating cubes and beams "; -- second: say "past another level of floating cubes and beams "; say "and waft lightly into the red-hot lava filling the bottom of the chamber..."; end the game in death. Falling in Barsap's Gambit when the player is gravity-resistant and the location is On-Beam and landing site is nothing (this is the fall from On-Beam without landing site rule): say "[one of][paragraph break][paragraph break][paragraph break]!!![paragraph break]Amazingly, y[or]Y[stopping]ou float downwards like a feather[first time], instead of falling to your death[only]. "; if level fallen from is third: [falling from bottom layer] say "Unfortunately, you float slowly down to the bottom of the chamber, which is filled with red-hot lava."; end the game in death; otherwise: [falling from top or middle layers] say "At first you see nothing but the red glare below, but then you see you are drifting down towards another network of floating cubes and beams. [run paragraph on]"; let landing site be a random maze beam traversing the potential maze path underlying the path being traveled of On-Beam; if landing site is nothing: say "You pass between two giant floating cubes, similar to the ones you just left. Sadly, no wooden beam seems to connect these particular cubes, and you continue falling [run paragraph on]"; follow the fall further in Barsap's Gambit rule. Falling in Barsap's Gambit when the player is gravity-resistant and the location is On-Beam and landing site is not nothing (this is the fall from On-Beam with landing site rule): say "[one of]Your panicked gaze falls upon [or]You soon see [stopping][a landing site] swimming up through the darkness below, and[if suppress every turn breakage check is true] you flap frantically until[else][first time], miraculously,[only][end if] your feet come to rest on it, leaving you teetering for balance."; if remaining uses of landing site is at least 1: reset On-Beam when landing safely; rule succeeds; [halt rulebook processing] otherwise: [beam landed on broke] remove landing site from play; say "[line break]As you flail wildly, it also snaps, sending you spiraling crazily downwards [run paragraph on]"; follow the fall further in Barsap's Gambit rule. Falling in Barsap's Gambit (this is the fall further in Barsap's Gambit rule): if the level fallen from is first: [top layer] say "past yet another level of floating cubes and beams and "; say "into a bubbling pit of lava at the bottom of the cavern."; [middle layer] end the game in death. To clear any beam from On-Beam: let abandoned beam be a random maze beam in On-Beam; if abandoned beam is not nothing: let niche-returned-to be a random maze niche connected by the path being traveled of On-Beam; now abandoned beam is in niche-returned-to. To reset On-Beam when landing safely: clear any beam from On-Beam; now On-Beam is not visited; now the level of On-Beam is the maze level after the level of On-Beam; [ say "[line break] current level set to [level of On-Beam]";] let new path be a random potential maze path underlying the path being traveled of On-Beam; let new bridge be a random maze beam traversing new path; [ say "[line break] new bridge = [new bridge] [internal name of new bridge]";] let first niche be a random maze niche connected by new path; [start with either one] [ say "[line break] first niche = [first niche] / side = [side of first niche]";] now new path does not connect first niche; [temporary, to prevent accidental selection of same nice for second niche.] let second niche be a random maze niche connected by new path that is not first niche; [should be other one] [ say "[line break] second niche = [second niche] / side = [side of second niche]";] now new path connects first niche; [restore connection now that second niche is safely defined] reset On-Beam exits; change the opposite of side of first niche exit of On-Beam to the location of first niche; [set first direction's exit] change the opposite of side of second niche exit of On-Beam to the location of second niche; [set second direction's exit] now the path being traveled of On-Beam is the new path; now the new bridge is in On-Beam; move player to On-Beam; follow the check for beam breakage rule. Chapter - Rooms in Barsap's Gambit [Rooms are defined in the order of the original code's numbering, i.e. starting at northeast corner, moving from east to west within each row, and moving from north to south between rows. Object names are kept the same as Mr. Yu's to assist in checking against original code. However, the order of declaration of objects is changed: Objects are declared when first necessary implementing rooms according to ascending number code. Rearranging the declarations would not (ahem, be expected to) cause problems. Also note that not all original objects (e.g. "fake" beam objects and extra "On wooden beam" rooms) and some new objects (potential maze paths) are included. The "internal name" property of some objects is defined for enabling certain debugging output, as Inform 7 does not seem to provide access to the "true" object name, only the printed name.] Section - Gambit_11 (GAMBIT_11), the starting point of the maze A top level maze room called Gambit_11 is in Barsap's Gambit. It is down from Warm Room. "As far as you can tell, you are standing on a large white stone cube that somehow floats without visible support in a terrifyingly large underground chamber. The entire place is dimly lit red from somewhere below. There is a ladder up to a hole high in the ceiling here." An unimportant scenery thing called a high hole is in Gambit_11. The maze ladder is in Gambit_11. [See "Warm Room" for declaration of this backdrops.] The internal name of Gambit_11 is "On White Cube 1NE". A southern maze niche with internal name "n113" called a n113 is in Gambit_11. A western maze niche with internal name "n112"called a n112 is in Gambit_11. There is an ebony maze beam with internal name "e12" called an e12 in n113. There is a pine maze beam with internal name "p15" called a p15 in n112. Section - Gambit_12 (GAMBIT_12) There is a top level maze room called Gambit_12. The internal name of Gambit_12 is "On White Cube 1N". An eastern maze niche with internal name "n124" called an n124 is in Gambit_12. A southern maze niche with internal name "n123" called a n123 is in Gambit_12. A western maze niche with internal name "n122" called a n122 is in Gambit_12. A potential maze path called a 1N-1NE is east of Gambit_12 and west of Gambit_11. It connects n124 and n112. There is a pine maze beam with internal name "p11" called a p11 in n123. There is a pine maze beam with internal name "p12" called a p12 in n122. Section - Gambit_13 (GAMBIT_13) There is a top level maze room called Gambit_13. The internal name of Gambit_13 is "On White Cube 1NW". An eastern maze niche with internal name "n134" called an n134 is in Gambit_13. A southern maze niche with internal name "n133" called a n133 is in Gambit_13. A potential maze path called a 1NW-1N is east of Gambit_13 and west of Gambit_12. It connects n134 and n122. There is a pine maze beam with internal name "p13" called a p13 in n133. Section - Gambit_14 (GAMBIT_14) There is a top level maze room called Gambit_14. The internal name of Gambit_14 is "On White Cube 1E". A northern maze niche with internal name "n141" called a n141 is in Gambit_14. A southern maze niche with internal name "n143" called a n143 is in Gambit_14. A western maze niche with internal name "n142" called a n142 is in Gambit_14. A potential maze path called a 1NE-1E is south of Gambit_11 and north of Gambit_14. It connects n113 and n141. There is a balsa maze beam with internal name "b12" called a b12 in n143. There is a balsa maze beam with internal name "b14" called a b14 in n142. Section - Gambit_15 (GAMBIT_15) There is a top level maze room called Gambit_15. The internal name of Gambit_15 is "On White Cube 1C". A northern maze niche with internal name "n151" called a n151 is in Gambit_15. An eastern maze niche with internal name "n154" called an n154 is in Gambit_15. A southern maze niche with internal name "n153" called a n153 is in Gambit_15. A western maze niche with internal name "n152" called a n152 is in Gambit_15. A potential maze path called a 1C-1E is east of Gambit_15 and west of Gambit_14. It connects n154 and n142. A potential maze path called a 1C-1N is north of Gambit_15 and south of Gambit_12. It connects n151 and n123. There is an ebony maze beam with internal name "e13" called an e13 in n153. There is a balsa maze beam with internal name "b11" called a b11 in n152. Section - Gambit_16 (GAMBIT_16) There is a top level maze room called Gambit_16. The internal name of Gambit_16 is "On White Cube 1W". A northern maze niche with internal name "n161" called a n161 is in Gambit_16. An eastern maze niche with internal name "n164" called an n164 is in Gambit_16. A southern maze niche with internal name "n163" called a n163 is in Gambit_16. A potential maze path called a 1W-1C is east of Gambit_16 and west of Gambit_15. It connects n164 and n152. A potential maze path called a 1W-1NW is north of Gambit_16 and south of Gambit_13. It connects n161 and n133. There is a balsa maze beam with internal name "b13" called a b13 in n163. Section - Gambit_17 (GAMBIT_17) There is a top level maze room called Gambit_17. The internal name of Gambit_17 is "On White Cube 1SE". A northern maze niche with internal name "n171" called a n171 is in Gambit_17. A western maze niche with internal name "n172" called a n172 is in Gambit_17. A potential maze path called a 1SE-1E is north of Gambit_17 and south of Gambit_14. It connects n171 and n143. There is a balsa maze beam with internal name "b15" called a b15 in n172. Section - Gambit_18 (GAMBIT_18) There is a top level maze room called Gambit_18. The internal name of Gambit_18 is "On White Cube 1S". A northern maze niche with internal name "n181" called a n181 is in Gambit_18. An eastern maze niche with internal name "n184" called an n184 is in Gambit_18. A western maze niche with internal name "n182" called a n182 is in Gambit_18. A potential maze path called a 1S-1SE is east of Gambit_18 and west of Gambit_17. It connects n184 and n172. A potential maze path called a 1S-1C is north of Gambit_18 and south of Gambit_15. It connects n181 and n153. Section - Gambit_19 (GAMBIT_19) There is a top level maze room called Gambit_19. The internal name of Gambit_19 is "On White Cube 1SW". A northern maze niche with internal name "n191" called a n191 is in Gambit_19. An eastern maze niche with internal name "n194" called an n194 is in Gambit_19. A potential maze path called a 1SW-1S is east of Gambit_19 and west of Gambit_18. It connects n194 and n182. A potential maze path called a 1SW-1W is north of Gambit_19 and south of Gambit_16. It connects n191 and n163. There is a pine maze beam with internal name "p14" called a p14 in n194. Section - Gambit_21 (GAMBIT_21) There is a middle level maze room called Gambit_21. The internal name of Gambit_21 is "On White Cube 2NE". A southern maze niche with internal name "n213" called a n213 is in Gambit_21. A western maze niche with internal name "n212" called a n212 is in Gambit_21. A pine maze beam with internal name "p21" called a p21 is in n213. A balsa maze beam with internal name "b21" called a b21 is in n212. Section - Gambit_22 (GAMBIT_22) There is a middle level maze room called Gambit_22. The internal name of Gambit_22 is "On White Cube 2N". An eastern maze niche with internal name "n224" called an n224 is in Gambit_22. A southern maze niche with internal name "n223" called a n223 is in Gambit_22. A western maze niche with internal name "n222" called a n222 is in Gambit_22. A potential maze path called a 2N-2NE is east of Gambit_22 and west of Gambit_21. It connects n224 and n212. It underlies 1N-1NE. A balsa maze beam with internal name "b22" called a b22 is in n222. A balsa maze beam with internal name "b23" called a b23 is in n223. Section - Gambit_23 (GAMBIT_23) There is a middle level maze room called Gambit_23. The internal name of Gambit_23 is "On White Cube 2NW". An eastern maze niche with internal name "n234" called an n234 is in Gambit_23. A southern maze niche with internal name "n233" called a n233 is in Gambit_23. A potential maze path called a 2NW-2N is east of Gambit_23 and west of Gambit_22. It connects n234 and n222. It underlies 1NW-1N. A balsa maze beam with internal name "b24" called a b24 is in n233. Section - Gambit_24 (GAMBIT_24) There is a middle level maze room called Gambit_24. The internal name of Gambit_24 is "On White Cube 2E". A northern maze niche with internal name "n241" called a n241 is in Gambit_24. A southern maze niche with internal name "n243" called a n243 is in Gambit_24. A western maze niche with internal name "n242" called a n242 is in Gambit_24. A potential maze path called a 2NE-2E is south of Gambit_21 and north of Gambit_24. It connects n213 and n241. It underlies 1NE-1E. A pine maze beam with internal name "p23" called a p23 is in n242. A pine maze beam with internal name "p22" called a p22 is in n243. Section - Gambit_25 (GAMBIT_25) There is a middle level maze room called Gambit_25. The internal name of Gambit_25 is "On White Cube 2C". A northern maze niche with internal name "n251" called a n251 is in Gambit_25. An eastern maze niche with internal name "n254" called an n254 is in Gambit_25. A southern maze niche with internal name "n253" called a n253 is in Gambit_25. A western maze niche with internal name "n252" called a n252 is in Gambit_25. A potential maze path called a 2C-2E is east of Gambit_25 and west of Gambit_24. It connects n254 and n242. It underlies 1C-1E. A potential maze path called a 2C-2N is north of Gambit_25 and south of Gambit_22. It connects n251 and n223. It underlies 1C-1N. A pine maze beam with internal name "p24" called a p24 is in n252. A balsa maze beam with internal name "b25" called a b25 is in n253. Section - Gambit_26 (GAMBIT_26) There is a middle level maze room called Gambit_26. The internal name of Gambit_26 is "On White Cube 2W". A northern maze niche with internal name "n261" called a n261 is in Gambit_26. An eastern maze niche with internal name "n264" called an n264 is in Gambit_26. A southern maze niche with internal name "n263" called a n263 is in Gambit_26. A potential maze path called a 2W-2C is east of Gambit_26 and west of Gambit_25. It connects n264 and n252. It underlies 1W-1C. A potential maze path called a 2W-2NW is north of Gambit_26 and south of Gambit_23. It connects n261 and n233. It underlies 1W-1NW. A balsa maze beam with internal name "b26" called a b26 is in n263. Section - Gambit_27 (GAMBIT_27) There is a middle level maze room called Gambit_27. The internal name of Gambit_27 is "On White Cube 2SE". A northern maze niche with internal name "n271" called a n271 is in Gambit_27. A western maze niche with internal name "n272" called a n272 is in Gambit_27. A potential maze path called a 2SE-2E is north of Gambit_27 and south of Gambit_24. It connects n271 and n243. It underlies 1SE-1E. A balsa maze beam with internal name "b27" called a b27 is in n272. Section - Gambit_28 (GAMBIT_28) There is a middle level maze room called Gambit_28. The internal name of Gambit_28 is "On White Cube 2S". A northern maze niche with internal name "n281" called a n281 is in Gambit_28. An eastern maze niche with internal name "n284" called an n284 is in Gambit_28. A western maze niche with internal name "n282" called a n282 is in Gambit_28. A potential maze path called a 2S-2SE is east of Gambit_28 and west of Gambit_27. It connects n284 and n272. It underlies 1S-1SE. A potential maze path called a 2S-2C is north of Gambit_28 and south of Gambit_25. It connects n281 and n253. It underlies 1S-1C. An ebony maze beam with internal name "e21" called an e21 is in n282. Section - Gambit_29 (GAMBIT_29) There is a middle level maze room called Gambit_29. The internal name of Gambit_29 is "On White Cube 2SW". A northern maze niche with internal name "n291" called a n291 is in Gambit_29. An eastern maze niche with internal name "n294" called an n294 is in Gambit_29. A potential maze path called a 2SW-2S is east of Gambit_29 and west of Gambit_28. It connects n294 and n282. It underlies 1SW-1S. A potential maze path called a 2SW-2W is north of Gambit_29 and south of Gambit_26. It connects n291 and n263. It underlies 1SW-1W. Section - Gambit_31 (GAMBIT_31) There is a bottom level maze room called Gambit_31. The internal name of Gambit_31 is "On White Cube 3NE". A southern maze niche with internal name "n313" called a n313 is in Gambit_31. A western maze niche with internal name "n312" called a n312 is in Gambit_31. A balsa maze beam with internal name "b31" called a b31 is in n312. A balsa maze beam with internal name "b32" called a b32 is in n313. Section - Gambit_32 (GAMBIT_32) There is a bottom level maze room called Gambit_32. The internal name of Gambit_32 is "On White Cube 3N". An eastern maze niche with internal name "n324" called an n324 is in Gambit_32. A southern maze niche with internal name "n323" called a n323 is in Gambit_32. A western maze niche with internal name "n322" called a n322 is in Gambit_32. A potential maze path called a 3N-3NE is east of Gambit_32 and west of Gambit_31. It connects n324 and n312. It underlies 2N-2NE. A pine maze beam with internal name "p31" called a p31 is in n322. A balsa maze beam with internal name "b33" called a b33 is in n323. Section - Gambit_33 (GAMBIT_33) There is a bottom level maze room called Gambit_33. The internal name of Gambit_33 is "On White Cube 3NW". An eastern maze niche with internal name "n334" called an n334 is in Gambit_33. A southern maze niche with internal name "n333" called a n333 is in Gambit_33. A potential maze path called a 3NW-3N is east of Gambit_33 and west of Gambit_32. It connects n334 and n322. It underlies 2NW-2N. A balsa maze beam with internal name "b34" called a b34 is in n333. Section - Gambit_34 (GAMBIT_34) There is a bottom level maze room called Gambit_34. The internal name of Gambit_34 is "On White Cube 3E". A northern maze niche with internal name "n341" called a n341 is in Gambit_34. A southern maze niche with internal name "n343" called a n343 is in Gambit_34. A western maze niche with internal name "n342" called a n342 is in Gambit_34. A potential maze path called a 3NE-3E is south of Gambit_31 and north of Gambit_34. It connects n313 and n341. It underlies 2NE-2E. A balsa maze beam with internal name "b35" called a b35 is in n342. A balsa maze beam with internal name "b37" called a b37 is in n343. Section - Gambit_35 (GAMBIT_35) There is a bottom level maze room called Gambit_35. The internal name of Gambit_35 is "On White Cube 3C". A northern maze niche with internal name "n351" called a n351 is in Gambit_35. An eastern maze niche with internal name "n354" called an n354 is in Gambit_35. A southern maze niche with internal name "n353" called a n353 is in Gambit_35. A western maze niche with internal name "n352" called a n352 is in Gambit_35. A potential maze path called a 3C-3E is east of Gambit_35 and west of Gambit_34. It connects n354 and n342. It underlies 2C-2E. A potential maze path called a 3C-3N is north of Gambit_35 and south of Gambit_32. It connects n351 and n323. It underlies 2C-2N. A balsa maze beam with internal name "b36" called a b36 is in n352. A balsa maze beam with internal name "b38" called a b38 is in n353. Section - Gambit_36 (GAMBIT_36) There is a bottom level maze room called Gambit_36. The internal name of Gambit_36 is "On White Cube 3W". A northern maze niche with internal name "n361" called a n361 is in Gambit_36. An eastern maze niche with internal name "n364" called an n364 is in Gambit_36. A southern maze niche with internal name "n363" called a n363 is in Gambit_36. A potential maze path called a 3W-3C is east of Gambit_36 and west of Gambit_35. It connects n364 and n352. It underlies 2W-2C. A potential maze path called a 3W-3NW is north of Gambit_36 and south of Gambit_33. It connects n361 and n333. It underlies 2W-2NW. A balsa maze beam with internal name "b39" called a b39 is in n363. Section - Gambit_37 (GAMBIT_37) There is a bottom level maze room called Gambit_37. The internal name of Gambit_37 is "On White Cube 3SE". A northern maze niche with internal name "n371" called an n371 is in Gambit_37. A western maze niche with internal name "n372" called an n372 is in Gambit_37. A potential maze path called a 3SE-3E is north of Gambit_37 and south of Gambit_34. It connects n371 and n343. It underlies 2SE-2E. After casting trohsme in Gambit_37 (this is the bypass means get to the end not get out rule): say "[if the fire spirit is at hand]The flames of the fire spirit slow down and become weirdly still, streamers of orange and yellow bleeding into the surrounding space. [end if]The red glow from below becomes streakily intermixed with the darkness, the edges of the white cubes start to drip and run, and everything dissolves into a swirl of impressionistic color. When your vision clears, however, you find yourself precisely where you were." A balsa maze beam with internal name "b3a" called a b3a is in n372. Section - Gambit_38 (GAMBIT_38) There is a bottom level maze room called Gambit_38. The internal name of Gambit_38 is "On White Cube 3S". A northern maze niche with internal name "n381" called a n381 is in Gambit_38. An eastern maze niche with internal name "n384" called an n384 is in Gambit_38. A western maze niche with internal name "n382" called a n382 is in Gambit_38. A potential maze path called a 3S-3SE is east of Gambit_38 and west of Gambit_37. It connects n384 and n372. It underlies 2S-2SE. A potential maze path called a 3S-3C is north of Gambit_38 and south of Gambit_35. It connects n381 and n353. It underlies 2S-2C. A balsa maze beam with internal name "b3b" called a b3b is in n382. Section - Gambit_39 (GAMBIT_39) There is a bottom level maze room called Gambit_39. The internal name of Gambit_39 is "On White Cube 3SW". A northern maze niche with internal name "n391" called a n391 is in Gambit_39. An eastern maze niche with internal name "n394" called an n394 is in Gambit_39. A potential maze path called a 3SW-3S is east of Gambit_39 and west of Gambit_38. It connects n394 and n382. It underlies 2SW-2S. A potential maze path called a 3SW-3W is north of Gambit_39 and south of Gambit_36. It connects n391 and n363. It underlies 2SW-2W. Chapter - Interesting things in Barsap's Gambit Section - Large Round Hole (Gambit_hole) A large round hole is a fixed in place open enterable container in Gambit_37. "In the center of the room is a large round hole, going straight down through the floating cube." The size of the large round hole is 30. The description of the large round hole is "A large round hole cut straight through the giant cube you stand on[first time]. All you need is a huge square peg[only]." Instead of entering the large round hole while the fire spirit is at hand (this is the fire spirit prevents entry of the large round hole rule): say "The towering fire spirit blocks your way!" Instead of going down when the large round hole is at hand (this is the in some players will probably try to go down meaning enter rule): try entering the large round hole instead. Instead of inserting something into the large round hole while the fire spirit is at hand (this is the fire spirit prevents putting things in large round hole rule): say "The towering fire spirit is in your way!" Instead of rubbing or pushing or pulling or touching or squeezing or turning or shaking the large round hole (this is the interaction with giant hole is limited rule): say "I don't know how to do that to a giant hole." [See note in section "Prison Cell" for a technical note about the original source code logic producing the following message, which returns an unusual value (2) for the action in the original.] After entering the large round hole (this is the player successfully enters large round hole rule): if Yu's revenge is false: accomplish mazemaster; say "You close your eyes and jump straight into the hole! There is a bright flash of light...[paragraph break]"; move player to Gambit_11. After inserting something into the large round hole (this is the large round hole transports items too rule): move the noun to Gambit_11; say "You drop [the noun] into the hole. There is a bright flash of light, and the object disappears!" After searching the large round hole (this is the searching the hole response rule): if the fire spirit is at hand: say "At the moment, the most notable feature of the hole is the giant, deadly fire spirit filling it."; otherwise: say "Looking through the hole, you can see a reddish haze far below." Section - Smoke-Colored Rod (smoke_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A fake rod called a smoke-colored rod piece is in Gambit_37. "Sitting on the floor is a short smoke-colored rod." The color of the smoke-colored rod is "like smoke". Understand "smoke" as the smoke-colored rod. Section - Fire Spirit (fire_spirit) [Note that this thing makes use of the spirit kind, which did not exist in the original source code. See "New Kinds" for details.] There is a spirit called a fire spirit. "The malevolent inferno that is the fire spirit springs from [a large round hole] in the floor." The description of the fire spirit is "It looks like a tower of animated flame." Understand "living" or "tower" or "tower of" or "animated" or "flame" or "flames" or "inferno" as the fire spirit. The killing blow description of the fire spirit is "The fire creature swells and engulfs you in a deadly inferno! You are instantly burned to a crisp." The successful strong attack description of the fire spirit is "The fire spirit sears you with a jet of fire!" The successful medium attack description of the fire spirit is "The fire spirit flings a small ball of flame your way! Your singed flesh stings." The attack misses player description of the fire spirit is "The fire spirit tries to torch you in a sheet of flame, but you evade just in time!" The cumulative injuries kill the player description of the fire spirit is "The last blow from the fire spirit was too much for you, I'm afraid to say. The spirit senses your weakness and lunges forward, engulfing you in flame." The successful hit by player description of the fire spirit is "You strike the fire creature, but your attack passes harmlessly through it. You hear a crackling noise that could pass for laughter." The miss by player description of the fire spirit is "The flame swirls and escapes your blow." The reaction to spellcasting of the fire spirit is "Crackling flame drowns out your chant." The banishment event description of the fire spirit is "The words of power thunder from your lips, and the fire spirit falls back in fear. With the last word of the spell, the flame is snuffed out of existence -- banished to another plane and leaving behind only a harmless wisp of smoke ." Every turn when the large round hole is at hand and the large round hole had not been at hand (this is the summon fire spirit to defend large round hole rule): move the fire spirit to the location of the large round hole; say "Without warning, a huge burst of fire issues from the hole in the center of the cube! A living tower of flame attacks!" The summon fire spirit to defend large round hole rule is listed after the generic spirit attack rule in the every turn rulebook. [This prevents the fire spirit from killing the player instantly upon arrival with a lucky roll.] Part - Borphee [BORPHEE.INF] Chapter - Downtown New Borphee (BORPHEE_GUSStop) Downtown New Borphee is a room. "You're right in the middle of downtown New Borphee -- perhaps the busiest, most crowded city you've ever seen. Huge brand-new buildings and throngs of fast-moving people make the whole scene somewhat surreal. The streets head north to a business district, while a set of stairs here leads down." An unimportant scenery thing called the New Borphee business district is in Downtown New Borphee. An unimportant scenery thing called some streets is in Downtown New Borphee. Some buildings are an unimportant backdrop in Downtown New Borphee. The GUS Stop stairway is in Downtown New Borphee. [See "Entrance to Greater Anthar" for declaration of this backdrop.] The circular sign is in Downtown New Borphee. [See "Entrance to Greater Anthar" for declaration of this backdrop.] Instead of going nowhere in Downtown New Borphee when the noun is a cardinal direction (this is the New Borphee is not picturesque rule): say "You walk around downtown a bit, are appalled by the sights, and hastily return here." Section - Throngs of Fast-Moving People [These background people are not given a separate existence in the original source code. They are given one here for consistency of the world-model.] Some throngs of fast-moving people are unimportant scenery people in Downtown New Borphee. Understand "crowd" or "crowds" or "throng" as the throngs of fast-moving people. Chapter - Business District (BORPHEE_BD) [This object made use of the I6 'general' attribute in its original code to track whether the flour scroll had been place in the room upon the player's first arrival. In this implementation, an after rule making use of the room's "visited" property is substituted.] A room called Business District is north of Downtown New Borphee. "You're in a crowded business district filled with busy people. The city thins out a bit to the north, while city streets head west and south. Directly to the east is a building so tall it makes you dizzy just looking at it." An unimportant plural-named backdrop called the streets of New Borphee is in Business District. Understand "city streets" as the streets of New Borphee. Every turn when the player is in Business District and Business District had not been visited (this is the player finds flour scroll on first visit to New Borphee Business District rule): now the flour-coated scroll is in Business District; say "A number of people rudely brush past you and accidentally knock you down. A kindly old lady helps you to your feet. 'I think you dropped that,' she says, pointing to a paper object nearby that doesn't seem familiar. She walks off, and is soon lost in the crowd."; continue the action. Section - Busy People [These background people are not given a separate existence in the original source code. They are given one here for consistency of the world-model.] Some busy people are unimportant scenery people in Business District. Understand "crowd" or "crowds" as the busy people. Section - Extremely Tall Building A proxy entrance called an extremely tall building is in Business District. The relevant direction of the extremely tall building is east. Understand "skyscraper" as the extremely tall building. Section - Flour Scroll (flour_scroll) There is a scroll called a flour-coated scroll. Understand "floury" or "flour coated" or "flour-covered" or "flour scroll" as the flour-coated scroll. The flour-coated scroll is inscribed with gloth. Chapter - City Streets (BORPHEE_CS) A room called City Streets is west of Business District. "You're on some busy side street in New Borphee. There's a crowded walk back east. To the north is the entrance to some sort of open area, with a large open arch." A busy side street, a crowded walk, and an entrance to an open area are unimportant scenery in City Streets. Section - Open Arch (fake_arch) A distant view called an open arch is in City Streets. The description of the open arch is "A large metal and stone arch. You'll have to get closer to see anything more." Chapter - Inside Skyscraper (Skyscraper) [Note that, in the original source code, this location had an I6 'e_to' property returning the string "You can't go that way.", which can be later modified by the Thief's magic door (i.e. magic_door). This implementation handles this via a check rule found in the "Thiefway" section.] A room called Inside Skyscraper is east of Business District. "You're inside a gigantic skyscraper. The marble trim and brass fixtures exude professionalism. There's a small open chamber to the north. City streets are to the west." An unimportant mass-nouned scenery thing called some marble trim is in Inside Skyscraper. The view of city streets is in Inside Skyscraper. [Note: see "Entrance to Greater Anthar" for declaration of this backdrop.] An unimportant backdrop called some brass fixtures is in Inside Skyscraper. [Note: the original code used a 'before' property in the room object to issue the following response. Since it seems the action would not have been stopped, an I7 before rule is used here.] Before going north from Inside Skyscraper (this is the entering skyscraper elevator is a one-way trip rule): say "As you enter the small chamber, metal doors suddenly spring forward and close behind you!" Section - Construction Sign (ss_sign) [Note: This object made use of the I6 'general' attribute in the original code to make sure the hint about there being no stairs was displayed only once. This implementation shows it the first time the player examines the sign, regardless of other conditions, so it is not reflected here.] A fixed in place thing called a construction sign is in Inside Skyscraper. "A large sign is posted near the small chamber." The description of the construction sign is "The sign reads:[paragraph break][fixed letter spacing]ELEVATOR UNDER CONSTRUCTION[line break][5 spaces]PLEASE USE STAIRS[variable letter spacing]". After examining the construction sign when we have not examined the construction sign and the thiefway is undescribed (this is the give a hint about best location for The Thief's magic door if it's not already installed rule): say "Oddly, there don't seem to be any stairs." Section - Thiefway [This door does not appear in the original source code -- rather, it does appear (as magic_door) but is used in a way that is illegal in Inform 7. This attempts to emulate the behavior by creating a permanent passageway that is only accessible to the player after the "strange door" is successfully deployed. Note that the original source code specified I6 'door_dir', 'door_to', and 'found_in' properties and an I6 Before() rule for the Enter action, all of which are superfluous in the I7 paradigm for doors, so no equivalent is included. Also note that the logic associated with the magic_door object's I6 'time_out' property has been redefined as an event here in this section. The magic_door object from which this door is derived made use of the I6 'general' attribute to track the first time that it was opened after being connected. The more descriptive term "revealed as magical" is used here. Finally. note that this implementation requires the player to escape with the painting without being caught in order to keep it.] There is a privately-named undescribed locked door called a thiefway. The printed name of the thiefway is "strange door". The thiefway is east of Inside Skyscraper and west of Wondrous Stairway. The thiefway can be hinted or unhinted. The thiefway can be revealed as magical. The description of the thiefway is "A small door labeled 'STAIRS', of all things."The size of the thiefway is 30. Understand "strange" or "magic" or "magical" or "door" or "doorway" as the thiefway when the thiefway is described. [Note the slight change in message from the west side of the closed door here to simplify construction of the following rule.] Rule for writing a paragraph about the thiefway when the thiefway is described (this is the I6 describe equivalent for the deployed strange door rule): if the thiefway is open: say "There's an open door to the [direction of thiefway from the location]."; else: say "There's a closed door in the [direction of thiefway from the location]ern wall." Instead of going east in Inside Skyscraper when the thiefway is not described (this is the pretend there is no valid path there when the PC shouldn't know about it rule): abide by the fake can't go that way rule. After opening the thiefway when the thiefway is not revealed as magical (this is the Thief has a sixth sense of when his treasure is threatened rule): now the thiefway is revealed as magical; the thief discovers an unexpected visitor in 18 turns from now; [additional three turns granted over original due to new escape requirement] say "The door opens. There's a dim chamber on the other side, which seems all but impossible, given that the wall previously appeared to be solid!" After going through the thiefway the first time (this is the bit of flavor for using magic door rule): say "With no small amount of trepidation, you step through the magical doorway..."; continue the action. After searching the thiefway when the thiefway is described and the thiefway is open (this is the can't see well enough to warrant additional implementation hassle rule): say "It's difficult to make out what lies through the door, but it looks as though you can just walk right through it now." At the time when the thief discovers an unexpected visitor: now the thiefway is closed; now the thiefway is locked; if the location is in Brigand's Domain: say "Out of the shadows springs a gentleman dressed in black! 'How did you get in here?' he cries. [if the player bears an artwork]In an instant, he extracts [the list of things that are artworks born by the player] from your possession, chuckling something about a 'novice effort' under his breath as he does so. [end if][paragraph break]Quicker than lightning, he envelops you in his dark cape, which seems to fade into shadows, leaving you in..."; now every artwork born by the player is in Workroom; move the player to Inside Skyscraper; otherwise if the location is Inside Skyscraper: say "Out of the shadows, a gentleman dressed in black appears! He sees the door to the east and seems somewhat annoyed.[paragraph break]'Much too busy for unexpected guests,' he murmurs as he slips through the door and closes it behind him. Moments later you hear the sound of a lock closing on the other side."; otherwise: do nothing. Every turn when the player has been in Inside Skyscraper for three turns and the player carries the strange door and the thiefway is unhinted (this is the provide hint about how to install the strange door rule): now the thiefway is hinted; say "You notice something odd as you move about the room: The strange door seems to be ever-so-slightly attracted to the eastern wall." Section - Eastern Wall A uniquely-named scenery supporter called an eastern wall is in Inside Skyscraper. Understand "east wall" as the eastern wall. Instead of inserting something into the eastern wall (this is the interpret putting things in the wall as putting things on the wall rule): try putting the noun on the eastern wall instead. Instead of putting the strange door on the eastern wall (this is the putting the strange door on the wall installs it rule): link the thief's door to the wall; say "As you bring the door close to the wall, it leaps from your hands, embedding itself there. A doorway fades into existence around it." To let the player know they're getting warmer about the wall: say "The door exhibits a noticeable tug towards the wall while you are near it."; After doing something when the the player carries the strange door and the current action involves the eastern wall (this is the stronger hint about wall rule): now the thiefway is hinted; [prevent hint if player knows to look for the wall] if the noun is the eastern wall and the action requires a touchable noun: let the player know they're getting warmer about the wall; if the second noun is the eastern wall and the action requires a touchable second noun: let the player know they're getting warmer about the wall; continue the action. After searching the eastern wall (this is the deny all specialness of the wall rule): say "It seems totally ordinary." The deny all specialness of the wall rule is listed after the stronger hint about wall rule in the after rules. After searching the eastern wall at least twice (this is the continue to deny all specialness of the wall rule): say "It seems totally ordinary, even under repeated scrutiny." The continue to deny all specialness of the wall rule is listed after the stronger hint about wall rule in the after rules. Chapter - Inside Elevator (Elevator) A dark room called Inside Elevator is north of Inside Skyscraper. "You are inside a cramped metal room with featureless walls. There are no obvious exits." Instead of going south from Inside Elevator (this is the can't walk through elevator doors rule), say "The doors seem to be closed tight." Every turn while the location is Inside Elevator (this is the patient players will eventually be let out rule): if a random chance of 1 in 20 succeeds: say "Suddenly, the doors spring open! You dive out."; now the player is in Inside Skyscraper. Section - Paper Note (elevator_sign) [Note that the name of this object is modified from the original. Also, the implicitly underlined word "here" is converted to bold type.] A fixed in place papery thing called a posted note is in Inside Elevator. "There's a small paper sign attached to a wall." Understand "paper" or "sign" as the posted note. The description of the posted note is "'Shep:[paragraph break]Put the elevator buttons [bold type]here[roman type].[paragraph break] -T'" [IMPDO - Make this a puzzle? Panel behind sign with wires to allow control of elevator?] Section - Elevator Doors (elevator_doors) [Note: This object was commented out in the original code, but its presence seems appropriate.] Some scenery things called some elevator doors is in Inside Elevator. The description of the elevator doors is "Solid-looking metal sliding doors." Understand "door" as the elevator doors. Instead of pushing or pulling or opening the elevator doors (this is the elevator doors can't be forced open rule), say "Try as you might, the doors are shut fast." Instead of closing the elevator doors (this is the elevator doors can't be closed by hand rule), say "They appear to already be closed." Chapter - New Borphee Suburbs (BORPHEE_burbs) A room called New Borphee Suburbs is north of Business District. "A suburb starts here, in contrast to the start of a big downtown to the south. For a residential area, it's surprisingly crowded. A main street runs north-south here." The big downtown is unimportant uniquely-named scenery in New Borphee Suburbs. An unimportant uniquely-named scenery backdrop called a main street is in New Borphee Suburbs. Chapter - New Borphee Outskirts (BORPHEE_Outskirts) A room called New Borphee Outskirts is north of New Borphee Suburbs. "New Borphee stops here, although it probably won't for long. A rough trail leads off into some woods to the northwest, or you can enter the city to the south." A view of the city is an unimportant distant view in New Borphee Outskirts. The printed name of the view of the city is "city". Some woods are an unimportant vegetable-like mass-nouned backdrop in New Borphee Outskirts. Understand "forest" or "trees" as the woods. A rough trail is an unimportant backdrop in New Borphee Outskirts. Instead of going northeast in New Borphee Outskirts (this is the Accardi-by-the-Sea is closed rule), say "Accardi-By-The-Sea is closed to visitors these days." Chapter - Forest (BORPHEE_Forest) A room called Forest is northwest of New Borphee Outskirts. "Deep forest surrounds you. A rough trail runs north and southeast." Some woods and a rough trail are in Forest. [See "New Borphee Outskirts" for declaration of these backdrops.] Chapter - Over River (Over_river) A room called Over River is north of Forest. "You're on a bridge crossing a large river below. Trails lead north and south into woods." Some trails are unimportant scenery in Over River. An unimportant scenery thing called a nice new bridge is in Over River. The woods are in Over River. [See "New Borphee Outskirts" for declaration of this backdrop.] Section - Coin (c5) There is a coin. It is in Over River. Section - Phee River (Phee_river) [Note that this object did not have a defined size in the original source code. It is arbitrarily given a size of 90 to prevent the size check from intercepting attempts to put things into it. Also, note that some logic for the corresponding object in the original source code that is relevant to the I6 LetGo fake action is handled here with a rule for the taking action, due to the operation of the 6G60 Standard Rule "convert remove to take".] A proper-named uniquely-named scenery watery container called the Phee River is in Over River. The description of the Phee River is "The placid river flows from east to west. Bunches of reeds line its banks." The size of the Phee River is 90. Understand "reeds" or "river's" or "edge" or "bank" or "banks" or "riverbank" or "riverbanks" as the Phee River. After inserting the toy volcano into the Phee River (this is the sorry no fun to be had here rule): remove the toy volcano from play; say "A gust of wind blows the volcano into some reeds by the river's edge, and you lose sight of it." After inserting something into the Phee River (this is the river current carries stuff out of play rule): now the noun is off-stage; say "You drop [the noun] into the river and watch it disappear." Instead of searching or rubbing or taking or pushing or pulling or squeezing or turning or shaking the Phee River (this is the interaction with the river is limited rule): say "The river is far below the bridge." Instead of taking something when the noun is in the Phee River (this is the river doesn't give stuff back rule): say "It's easy to put things into the river, but not so easy to get them back." [can't actually trigger this in normal play] [Note change of following message from original.] Instead of jumping when the Phee River is at hand (this is the can't jump around the river rule): say "That would be an ignoble end to your noble quest." Instead of swimming in the Phee River (this is the it's too far to jump rule): say "It's too far down to reach easily from here." Chapter - Forest Trail (Forest_trail) A room called Forest Trail is north of Over River. "A beaten trail cuts through some very dense forest running north and south." A beaten trail is an unimportant backdrop in Forest Trail. The woods are in Forest Trail. [See "New Borphee Outskirts" for declaration of this backdrop.] Chapter - Ravine Pass (Ravine_pass) A room called Ravine Pass is north of Forest Trail. "A forest ravine opens into a clearing to the north here, or a trail heads south." A clearing is an unimportant distant view in Forest Trail. An unimportant scenery backdrop called a ravine is in Ravine Pass. The beaten trail is in Ravine Pass. [See "Forest Trail" for declaration of this backdrop.] The woods are in Ravine Pass. [See "New Borphee Outskirts" for declaration of this backdrop.] Section - Group of Soldiers (army) Some people called some soldiers are in Ravine Pass. The description of the soldiers is "A group of well-armed soldiers, who look a little haggard." Understand "army" or "haggard" or "group of" or "group" or "well-armed" as the soldiers. Instead of going north from Ravine Pass while the soldiers are in Ravine Pass (this is the soldiers block the way north rule): say "The group of soldiers won't let you pass." Instead of attacking the soldiers (this is the attacking the soldiers is not wise rule), say "Ha! Not a chance." This is the army default life behavior rule: say "The soldiers are a little too weary to pay you any direct attention at the moment." Instead of doing something when the current action is generic life behavior and the current action involves the the soldiers (this is the group of soldiers generic life rule): abide by the army default life behavior rule. Persuasion rule for asking the soldiers to try doing something (this is the reroute understood orders to army to generic life response rule): consider the army default life behavior rule; rule fails. Section - Wicker Cage (wicker_cage) [This object made us of the I6 'add_to_scope' property in the original code to include the cage_lever object whenever it was in scope. In this implementation, the cage lever is made part of the wicker cage object.] A transparent fixed in place container called a wicker cage is in Ravine Pass. The description of the wicker cage is "A wicker cage, with two compartments, and a lever attached to the front." The size of the wicker cage is 20. The carrying capacity of the wicker cage is 3. Instead of opening the cage (this is the cage can't be opened directly rule), say "You can't seem to pry open the cage door by hand." Section - Cage Lever (cage_lever) A lever is part of the wicker cage. The description of the lever is "A wooden lever attached to the cage." [Note: The redundant condition that Morgan not be present is intentional, to assist in auto-ordering of rules.] Instead of pulling the lever while Morgan is not in Ravine Pass and Morgan is in Delbin's Pub (this is the can't pull lever before beer standoff solved rule): say "A soldier slaps your hand away. 'That windcat messenger box belongs to our Captain, Morgan Grueslayer, so don't mess with it!'" [Note: In the original code, this was implemented via an I6 'Before' function. Since it does not seem intended to short-circuit the action, an I7 after rule is used here.] After pulling the lever while Morgan is not in Ravine Pass (this is the lever doesn't do much after Morgan leaves rule): say "You pull the lever and watch the cage door momentarily open, then shut." Instead of pulling the lever while Morgan is in Ravine Pass and an unladen windcat is in the wicker cage (this is the can't loose windcats until they have flags rule): say "Morgan stops you and points at the windcats. 'An instruction must be sent with both of the cats, using the signal flags!'" After pulling the lever while Morgan is in Ravine Pass and two laden windcats are in the wicker cage (this is the resolve windcat puzzle rule): say "Morgan stops your hand, just as you are about to pull the lever. She looks at the cats. 'Are you quite sure, Priest?'[paragraph break]Now, that seems like a reasonable question. So, are you? "; if the player consents: now every windcat in the wicker cage is off-stage; [Bug report: 'remove every windcat from play' does not work.] remove the soldiers from play; remove Morgan from play; say "[line break]You nod and yank the lever. The cage door latch is loosened enough for both windcats to break free! The spotted windcat tears off to the west, and the speckled cat zips off to the east![paragraph break]There is a somewhat stressful pause.[paragraph break]"; if the speckled windcat bears a red flag and the spotted windcat bears a red flag: now combatants are off-stage; accomplish peacemaker; say "Simultaneously, from the east and west, a three horn signal sounds! Morgan smiles triumphantly. 'A truce has been declared! The war has ended!' The army soldiers yell a round of 'Three cheers!' before heading off.[paragraph break]Morgan shakes your hand with almost enough force to break it. 'Well done indeed, Priest. Your wisdom only compliments your tranquil nature.' She walks off, seeking the next challenge."; else: move combatants to Forest Clearing; say "Suddenly, from somewhere, a single horn note sounds! The sounds of a fight to the north are soon heard.[paragraph break]Morgan gives you a sad, tired look. 'Perhaps it was meant to be,' she says, as she and the army quickly march north to join their comrades."; else: say "[line break]You pause, to reconsider." Section - Red Flags (rf1 and rf2) Two red flags are in Ravine Pass. Section - Blue Flags (bf1 and bf2) Two blue flags are in Ravine Pass. Section - Speckled Windcat (E_windcat) A windcat called a speckled windcat is in the wicker cage. The description of the speckled windcat is "A sleek, speckled salt-and-pepper windcat, with large paws[if the item described encloses a flag] and [a random flag enclosed by the item described] around its neck[end if]." Understand "sleek" or "salt-and-pepper" as the speckled windcat. Section - Spotted Windcat (W_windcat) A windcat called a spotted windcat is in the wicker cage. The description of the spotted windcat is "A lithe, spotted black-and-white windcat, with large paws[if the item described encloses a flag] and [a random flag enclosed by the item described] around its neck[end if]." Understand "lithe" or "black-and-white" as the spotted windcat. Chapter - Forest Clearing (Forest_clearing) A room called Forest Clearing is north of Ravine Pass. "A open clearing is surrounded by forest trees here. A ravine pass is to the south, and a short trail heads northwest. You can just see a small cave opening to the northeast." A clearing and a ravine are in Forest Clearing. [See "Ravine Pass" for declaration of these backdrops.] Some forest trees are an unimportant vegetable-like scenery backdrop in Forest Clearing. An unimportant scenery thing called a pass is in Forest Clearing. The beaten trail is in Forest Clearing. [See "Forest Trail" for declaration of this backdrop.] Instead of going northwest from Forest Clearing while the combatants are in Forest Clearing (this is the bloody battle blocks northwest route rule): forbid wading through the battle. Instead of going northeast from Forest Clearing while the combatants are in Forest Clearing (this is the bloody battle blocks northeast route rule): forbid wading through the battle. To forbid wading through the battle: say "You're not getting past that bloody battle (intact)." Section - Small Cave Opening A proxy entrance called a small cave opening is in Forest Clearing. The relevant direction of the small cave opening is northeast. Section - Combatants (aka Bloody Battle) (battle) [Note that this object is given the I6 'animate' attribute in the original code. The analogous treatment in I7 is to use the person class.] Some combatants are people in Forest Clearing. "There's a violent battle taking place in the middle of the field." The description of the combatants is "It's a fierce battle. Kobolds and soldiers are locked in mortal combat. Getting too close would be certain death." Understand "violent" or "fierce" or "bloody" or "battle" or "soldiers" or "soldier" or "kobolds" or "kobold" or "mortal" or "combat" as the combatants. Instead of attacking the combatants (this is the you were warned it was bloody rule): say "You give a yell and plunge into the battle, and get skewered by a kobold arrow moments later."; end the game in death. This is the combatants default life behavior rule: say "At the moment, everyone seems rather occupied." Instead of doing something when the current action is generic life behavior and the current action involves the combatants (this is the bloody battle generic life rule): abide by the combatants default life behavior rule. Persuasion rule for asking the combatants to try doing something (this is the reroute understood orders to combatants to generic life response rule): consider the combatants default life behavior rule; rule fails. Chapter - Forest Brambles (Forest_brambles) A room called Forest Brambles is northwest of Forest Clearing. "There's a small area of forest surrounded by brambles and shrubs here. A trail leads southeast." The forest trees are in Forest Brambles. [See "Forest Clearing" for declaration of this backdrop.] An unimportant vegetable-like scenery thing called some brambles is in Forest Brambles. Some shrubs are unimportant vegetable-like scenery things in Forest Brambles. Understand "shrub" as the shrubs. The beaten trail is in Forest Brambles. [See "Forest Trail" for declaration of this backdrop.] Section - Large Kobold (kobold) [Note that, as the original source code specified the I6 'animate' attribute but no gender attribute and the I6 default for this case is to treat the resulting object as male, this implementation uses the I7 "person" kind with property "male" for the kobold. Note that, although this object is not given the I6 'transparent' attribute in the original, it is given the "open-inventoried" property here so the player can see the carried club (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part).] There is an open-inventoried male person called a large kobold in Forest Brambles. "There appears to be a wounded kobold here, resting against a shrub." The description of the large kobold is "He's a pretty tough-looking kobold. The large wound in his shoulder clearly has him in a foul mood." A shoulder wound is an animal-like thing part of the large kobold. The description of the shoulder wound is "The wound is not quite enough to be immediately life-threatening, but it's definitely a serious injury." Understand "injury" as the shoulder wound. The kobold wears an unimportant thing called a jerkin. To declare sympathy for the wounded kobold: say "Attacking a defenseless, wounded kobold would be somewhat unsporting." Instead of attacking the large kobold (this is the priests without borders rule): declare sympathy for the wounded kobold. Instead of throwing something at the large kobold (this is the no target practice on the kobold rule): declare sympathy for the wounded kobold. This is the kobold casualty default life behavior rule: say "The kobold hisses at you and spits out some words that you can't understand at all." Instead of doing something when the current action is generic life behavior and the current action involves the large kobold (this is the large kobold generic life rule): abide by the kobold casualty default life behavior rule. Persuasion rule for asking the large kobold to try doing something (this is the reroute understood orders to large kobold to generic life response rule): consider the kobold casualty default life behavior rule; rule fails. After casting taclor at the kobold (this is the if you can't beat them treat them rule): now the green sphere is in Forest Brambles; now the large kobold is off-stage; say "You begin your chant, and the kobold seems stricken with fear. Soon, however, the kobold stands up and looks at his healed shoulder with wonder. He starts to say something, realizes you don't speak kobold, and stops.[paragraph break]Puzzled by your actions, he stares at you for a moment, then searches his jerkin, finding a small object which he tosses at your feet before vanishing into the deep forest." To indicate the interspecies language barrier: say "The kobold cannot understand your language. The chant fails." After casting foblub at the kobold (this is the kobold can't be interested due to language barrier rule): indicate the interspecies language barrier. After casting espnis at the kobold (this is the kobold can't be bored due to language barrier rule): indicate the interspecies language barrier. Every turn when the large kobold is at hand (this is the yet another example of the portrayal of negative kobold stereotypes rule): if a random chance of 1 in 20 succeeds: say "The kobold swipes at you with a club in his good arm, but, due to his condition, doesn't come close." Section - Club [Note that this object does not exist in the original source code, but is given a brief presence in this implementation because it is mentioned if the kobold tries to attack the PC.] The large kobold carries an unimportant thing called a club. The description of the club is "A typical kobold weapon: crude, but effective." Section - Green Sphere (green_sphere) There is a sphere called a green sphere. The color of the green sphere is "green". Chapter - Forest Cave (Forest_cave) A room called Forest Cave is northeast of Forest Clearing. "A small cave mouth enters into darkness to the north here. A clearing lies to the southwest." The darkness is in Forest Cave. [See "On-Beam" for declaration of this backdrop.] The clearing is in Forest Cave. [See "Ravine Pass" for declaration of this backdrop.] The printed name of Forest Cave is "In Front of Cave". Section - Cave Mouth A proxy entrance called a cave mouth is in Forest Cave. The relevant direction of the cave mouth is north. Chapter - North-South Tunnel (CAVE_NSTUNNEL) A dark room called North-South Tunnel is north of Forest Cave. "You're in a natural cave tunnel running north and south. To the south you can see a glimmer of daylight." A glimmer of daylight is unimportant scenery in North-South Tunnel. Some unimportant scenery backdrops called some tunnels are in North-South Tunnel. Understand "tunnel" as the tunnels. Chapter - Tunnel Intersection (CAVE_INTER) A dark room called Tunnel Intersection is north of North-South Tunnel. "Several natural cave tunnels intersect here, running north, south, and east." Up from Tunnel Intersection is nowhere. [This last is needed to counteract assumption of reciprocity due to direction defined in Sloping Tunnel.] The tunnels are in Tunnel Intersection. [See "North-South Tunnel" for declaration of this backdrop.] Chapter - Twisting Tunnel (CAVE_CURVE) A dark room called Twisting Tunnel is north of Tunnel Intersection. "A natural cave tunnel makes short twists and turns here, running south and east." An unimportant scenery thing called some twists and turns are in Twisting Tunnel. Chapter - Damp Cave (CAVE_DAMP) A dark room called Damp Cave is east of Twisting Tunnel. "You're in a small cave with noticeably damp walls. Exits lie to the west and south." An unimportant scenery thing called a small cave is in Damp Cave. Some damp walls are an unimportant scenery thing in Damp Cave. Chapter - Sloping Tunnel (CAVE_NCREVASSE) A dark room called Sloping Tunnel is south of Damp Cave and east of Tunnel Intersection. "You're in a windy tunnel that gradually slopes up to the east, or down to the west. A cold breeze blows from a tunnel to the north." Down from Sloping Tunnel is Tunnel Intersection. Up from Sloping Tunnel is Windy Tunnel. The tunnels are in Sloping Tunnel. [See "North-South Tunnel" for declaration of this backdrop.] An unimportant scenery thing called a cold breeze is in Sloping Tunnel. Chapter - Windy Tunnel (CAVE_WINDY) A dark room called Windy Tunnel is east of Sloping Tunnel. "A strange wind seems to howl through this winding tunnel heading east and west. A crack in the tunnel wall exposes an exit north." Down from Windy Tunnel is nowhere. [This last is needed to counteract assumption of reciprocity due to direction defined in Sloping Tunnel.] The tunnels are in Windy Tunnel. [See "North-South Tunnel" for declaration of this backdrop.] A large crack is unimportant scenery backdrop in Windy Tunnel. A strange wind is an unimportant uniquely-named scenery thing in Windy Tunnel. After listening to the Windy Tunnel (this is the strange wind strangely has a sound rule): say "A light wind howls through this tunnel." Chapter - Bare Cavern (CAVE_BARE2) A dark room called Bare Cavern is east of Windy Tunnel. "A bare cavern. The exit is west." Section - Torn Parchment (p4) A parchment called a torn parchment is in Bare Cavern. The description of the torn parchment is "'...places no mortal man should go. There are planes of existence far beyond our own, that connect and interlace, so that even mortal man may tread upon the featureless gray of . But, I believe that there may be other planes, perhaps where the Implementors are said to live. Are these places just parts of existing planes or planes unto themselves? I do not...'" Chapter - Ancient Tunnel aka "Ancient Hallway" (Ancient_Tunnel) A dark room called Ancient Tunnel is north of Windy Tunnel. "You're in a stone hallway, clearly man-made. The dust and musty smell indicate the place hasn't been used for quite some time. The corridor runs north, while the south wall has a large crack, creating a dark opening." The printed name of Ancient Tunnel is "Ancient Hallway". Some dust and a hallway are unimportant backdrops in Ancient Tunnel. A dark opening is unimportant scenery things in Ancient Tunnel. The large crack is in Ancient Tunnel. [See "Windy Tunnel" for declaration of this backdrop.] After smelling the Ancient Tunnel (this is the musty smell is musty-smelling rule): say "The air smells a bit musty and stale." Chapter - End of Hallway (End_of_hall) A dark room called End of Hallway is north of Ancient Tunnel. "You're at the north end of a long stone hallway. You can follow the hallway back south, or you can take a set of cracked stone stairs up." A long stone hallway and a set of cracked stone stairs are unimportant scenery objects in End of Hallway. Chapter - Domed Chamber (Domed_chamber) [Note: This object made use of the I6 'general' attribute in the original code to cause the room description to be appended with a notice that player's amulet (if worn) gives off a purple flash. Here, this state tracking is done via the "scried" property of the air spirit.] A dark room called Domed Chamber is up from End of Hallway. "You are in a large man-made underground chamber, with a perfectly-domed high ceiling. Smooth stone archways lead to rooms to the north, south, east and west. Stone-cut steps lead down. In the very center of the ceiling you notice a [if the strange circular recess is closed]strange circular recess in the stone[else]circular hole[end if]." A dome, some smooth stone archways, some stone-cut steps, and a perfectly-domed high ceiling are unimportant scenery things in Domed Chamber. Every turn when the location is Domed Chamber and the air spirit is unscried (this is the warn of a possible spirit encounter in Domed Chamber rule): signal proximity to an unholy artifact guarded by the air spirit. Instead of going up from Domed Chamber (this is the Domed Chamber ceiling is too high to go to rule): say "The ceiling is too far above you." Section - Strange Circular Recess (fake_depression) [Note the change in the name of this item, compared to the original. It has also been converted to a door so that the map can understand the Domed Chamber's spatial relationship to the Secret Trophy Room. See chapter "Secret Trophy Room" for related changes. As a result, its status of being sealed and unsealed is now tracked via its being closed or open, respectively. Also note a small element of risk here: the current revision makes no effort to keep the recess's state consistent during time travel. It starts sealed and should be unsealed by the time the PC could ever reach the "past version" of the Secret Trophy Room. It is sealed by a rule there immediately, and the PC should be killed shortly and unavoidably afterwards, so there's no chance to return to the Domed Chamber and see it mysteriously sealed again. If you make it possible to escape the asphyxiation ending, please take this into account.] A closed scenery door called a strange circular recess is above Domed Chamber. The description of the strange circular recess is "[conditional description of the circular recess][run paragraph on]". Understand "recessed" or "slightly-recessed" or "slightly recessed" or "circle" or "center" as the strange circular recess. Understand "hole" or "opening" as the strange circular recess when the strange circular recess is open. Understand "sealed" or "stone" or "disk" or "disc" as the strange circular recess when the strange circular recess is closed. Understand "apex" as the strange circular recess when the location is Domed Chamber. To say conditional description of the circular recess: if the strange circular recess is closed: say "It looks like a slightly-recessed circle in [if the location is Domed Chamber]the apex of the ceiling. It's hard to tell from here whether it was something cut out of the stone; perhaps it's a separate piece[else]the center of the floor. If you hadn't seen the hole there before, you would never guess it had been there[end if]."; otherwise: say "It's a small circular hole shrouded in darkness." To indicate the distant nature of the circular recess: say "The circular recess is far out of reach above you." Instead of doing something when the current action involves the strange circular recess and the location is Domed Chamber (this is the circular recess is too far to reach rule): if the noun is the strange circular recess and the action requires a touchable noun: indicate the distant nature of the circular recess; stop the action; otherwise if the second noun is the strange circular recess and the action requires a touchable second noun: indicate the distant nature of the circular recess; stop the action; otherwise: continue the action. Chapter - Logic for Secret Trophy Room Puzzle Section - Note on Overall Puzzle Logic [This puzzle is one of the classic truthteller/liar logic puzzles, but it is much more complex than those I've encountered elsewhere. Due to the comment in the original source code about potential flaws in the clue structure, I spent a long afternoon and evening going through all of the possibilities with a with spreadsheets and diagrams to minimize my chances of screwing it up. The main reasons that this puzzle is difficult are: 1) Most puzzles in this vein involve crafting a question to put to a speaker of unknown status such that they will answer in a way that tells a useful truth no matter which they are. The classic example is having one question to put to one of two speakers, when you know one is a truthteller and the other is a liar, but you don't know which is which. By phrasing a question along the lines of: "What would the other person say if I asked him whether X is true?", you win. (How? Assume X is phrased as an assertion of a truth (like "1 = 1" or "the sky is blue" or "the treasure is behind door 2"). If the truthteller is asked , he answers truthfully that the other (a liar) would say "No." If the liar is asked, he answers *un*truthfully that the other (a truthteller) would say "No." Thus, you can safely assume that the opposite of the answer provided is the truth in any case, and pick door #2.) Importantly, in this puzzle there is no opportunity to ask a question! There is also no information given that allows any deduction about whether the truthteller (Veritassi) or the liar (Prevaricon) wrote any particular statement, and so there is a total of 16 possibilities about the state of the original paint, with consequent implications about the truth of the various statements. 2) Presumably, the overall truth or falsity of the total statement (as opposed to the truth or falsity of each individual proposition within it) is what counts in determining whether the statement is the truth or a lie. If so, then for each of the multi-proposition statements in the south and west trophy rooms, it is possible for individual propositions (or, in the case of the west room, combinations of propositions) within it to be true even if it were written by the lying Prevaricon. 3) The way that the west trophy room's clue is written uses an "either ... or ..." construction that, thanks to ambiguities in the English language, may mean either A) a "union" operation (i.e. OR construction), or B) an "exclusive or" operation (i.e. XOR construction). (The difference is that, if both P and Q are true, then the result of the OR is true but the result of the XOR is false.) Since nothing clarifies this, there are even more possibilities (32) to deal with, though this turns out not to matter for definitive solutions (see below). 4) Since the statements reference each other by way of asserting truths or untruths about their respective paint colors, there are elements of "second order" logic in working out the solution. In my analysis, the puzzle is actually broken in its original state. Although 20 of the 32 possible combinations of assumptions about the underlying paint colors can be thrown out due to inconsistencies in the axioms that result, of those that are consistent: 6 provide insufficient information to create a definitive solution (with four distinct patterns appearing) 4 provide a definitive solution (S,W,E,N) that is not reflected in the function of the game logic 2 provide a definitive solution (E,W,S,N) that matches what is implicit in release 3/960606's function (For all of the preceding groups, the cases are split evenly between OR and XOR construals of the west room's clue. I assumed that, due to the punctuation of the west trophy room's clue, it is safe to assume that normal precedence of logical operators applies, and the AND is evaluated before the OR/XOR.) It is MUCH easier (and probably quicker) to just brute-force a solution by saving the game and trying all 24 possible patterns for the room order. I'm pretty sure that's what I did when I first played this game, and this is what I would expect anyone to do in reality. However, I have gained a certain grim satisfaction in developing three new clues that, along with the trophy room clues, should narrow things down such that only the pattern laid out by Mr. Yu can be the solution (despite the OR/XOR ambiguity). Please don't hesitate to point out any mistakes.] Section - Mechanical Logic To reset the trophy room puzzle: now every trophy depression is not primed; now the eastern trophy depression is primed. [Note that the original source code's logic intercepted an I6 'Receive' action and would manually move the trophy to a given depression. There does not appear to be any particular reason for this, so in this implementation we allow the normal course of events to proceed and use after rules.] First after inserting the champion's trophy into a trophy depression (called the tested receptacle) (this is the incorrect trophy placement resets puzzle rule): if the tested receptacle is not primed, reset the trophy room puzzle; continue the action. [to allow audio cue and first placement rules] [Note that this rule uses "is primed" as the condition in case the puzzle was just reset.] After inserting the champion's trophy into the eastern trophy depression when the eastern trophy depression is primed (this is the first trophy placement is correct rule): now the eastern trophy depression is not primed; now the western trophy depression is primed; continue the action. [to allow audio cue rule] After inserting the champion's trophy into the western trophy depression when the western trophy depression was primed (this is the second trophy placement is correct rule): now the western trophy depression is not primed; now the southern trophy depression is primed; continue the action. [to allow audio cue rule] After inserting the champion's trophy into the southern trophy depression when the southern trophy depression was primed (this is the third trophy placement is correct rule): now the southern trophy depression is not primed; now the northern trophy depression is primed; continue the action. [to allow audio cue rule] [Note that, in the original source code, the equivalent logic for this rule directly modified the description property of the fake_depression object and the Domed Chamber room. Due to the implementation of this object as a door here, the former change is not necessary (though it is necessary to change the door's state to unsealed) and the latter change is handled with conditional text in the Domed Chamber's description. See the chapter "Domed Chamber" and section "Strange Circular Recess".] After inserting the champion's trophy into the northern trophy depression when the northern trophy depression was primed (this is the final trophy placement is correct rule): reset the trophy room puzzle; if the white rod piece is in the Secret Trophy Room: accomplish grand-theft-memento; now the strange circular recess is open; move the white rod piece to Domed Chamber; say "You hear a click, followed by a dull thump from the south." After inserting the champion's trophy into a trophy depression (this is the audio cue for trophy puzzle action rule): say "You hear a click." Chapter - Secret Trophy Room (TROPHY_SECRET) [Note: The original implementation of this object made use of a 'number' property to keep track of whether the player had visited the room before. This implementation uses the more descriptive property "sealed" -- attached to a different thing, the door called the "strange circular recess"-- to track the state. (see next paragraph) Also note that this implementation connects this room to the Domed Chamber via a door object which is not intended to be used. This is mainly to allow Inform's world map to understand the spatial relationship between the two rooms. See chapter "Domed Chamber" for the section including the declaration of the strange circular depression.] There is a room called Secret Trophy Room above the strange circular recess. "You're in a small domed stone room. [if the strange circular recess is open]The only exit, unfortunately, is a hole in the stone floor to a floor of another chamber far below. [else]There appear to be no exits -- the hole in the floor has been sealed with stone. [end if]Engraved in the wall is: 'LORD DUNCANTHRAX[']S PRIVATE TROPHY ROOM'." Instead of going down from Secret Trophy Room when the strange circular recess is closed (this is the can't walk through a massive stone disc rule): say "The hole is no longer a hole; it has been seamlessly and completely sealed by a thick stone disk." Instead of going down from Secret Trophy Room when the strange circular recess is open (this is the can't jump from trophy chamber to floor below rule): say "It's too far of a drop from here." [player shouldn't be able to see this in normal gameplay] [Note that the equivalent logic for the following rule set the Secret Trophy Room location to unvisited -- probably to trigger another "look" of the room via an I6 mechanism that no longer works in I7. A similar effect (forcing a room look) occurs when the "move the player..." command is used by the white elemental here.] Every turn when the player is in Secret Trophy Room and the strange circular recess is open (this is the visiting the Secret Trophy Room is hazardous rule): now the strange circular recess is closed; now Secret Trophy Room is dark; [ now Secret Trophy Room is not visited; ] say "Lord Duncanthrax and some of his soldiers are here.[paragraph break]Duncanthrax looks up and sees you. 'Who is that?' he asks. 'Looks like a priest,' a soldier says. 'Wonderful. First, the black paint, and now, a priest breaks into my trophy room.' He sighs. 'Will no one rid me of this meddlesome priest?' One of the soldiers takes the hint and knocks you out cold.[paragraph break]You awaken a short time later, with labored breathing and a rising sense of panic." Every turn when the player is in Secret Trophy Room and the strange circular recess was closed (this is the sealed Secret Trophy Room is lethal rule): say "You soon run out of air in the sealed stone room."; end the game in death. Section - White Rod Piece (white_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A fake rod called a white rod piece is in Secret Trophy Room. "In the center of the room is a short white rod." The color of the white rod piece is "cloud-white". Section - Air Spirit (air_spirit) [Note that this thing makes use of the spirit kind, which did not exist in the original source code. See "New Kinds" for details.] There is a spirit called an air spirit. The description of the air spirit is "It looks like a small, animated tornado capable of taking you for quite a spin." Understand "animated" or "moving" or "tornado" as the air spirit. The killing blow description of the air spirit is "The air creature moves with amazing speed! It surrounds you in a mass of whirling winds, and you find yourself spinning helplessly. The speed increases, and you are soon torn apart." The successful strong attack description of the air spirit is "The air spirit picks you up in a powerful gust of wind and sends you flying across the chamber! Ouch." The successful medium attack description of the air spirit is "The air spirit surrounds you with flying dust and debris, momentarily choking you! You break free just in time." The attack misses player description of the air spirit is "The air spirit charges, but you evade the moving tornado." The cumulative injuries kill the player description of the air spirit is "The last blow from the air spirit was too much for you, I'm afraid to say. You are picked up and tossed against the wall in a lifeless heap by a massive gust of wind." The successful hit by player description of the air spirit is "You strike the air creature, but your attack passes harmlessly through it! Strange laughter seems to echo from everywhere." The miss by player description of the air spirit is "You attack the air spirit, but miss!" The reaction to spellcasting of the air spirit is "A sharp gust of wind practically tears your chant out of your lungs." The banishment event description of the air spirit is "As you speak the chant, the air spirit falls back in fear! You finish the chant, and the air spirit slowly dissipates and grows smaller, until the creature vanishes completely." Every turn when the white rod piece is at hand and the the white rod piece had not been at hand (this is the summon air spirit to defend white rod piece rule): move the air spirit to the location of the white rod piece; say "You hear a whistling intake of air from the hole above your head. Without warning, a small tornado flows in from above. It seems to be sentient!" The summon air spirit to defend white rod piece rule is listed after the generic spirit attack rule in the every turn rulebook. [This prevents the air spirit from killing the player instantly upon arrival with a lucky roll.] Chapter - North Trophy Room (TROPHY_N) A dark room called North Trophy Room is north of Domed Chamber. "This is a bare cubical stone chamber. Some worn black lettering on the wall reads: 'THE EAST CHAMBER IS NOT THE FIRST TROPHY ROOM'. An archway exits south." The bare cubical stone chamber is an unimportant scenery backdrop in North Trophy Room. The archway is in North Trophy Room. [See "Palace Entrance Hall" for declaration of this backdrop.] Section - Northern Trophy Depression (Nkey_depression) A trophy depression called a northern trophy depression is in North Trophy Room. Chapter - East Trophy Room (TROPHY_E) [Note that, immediately following the declaration of this location object in the original source code, a commented-out section of code offered an alternative riddle statement. It is not clear whether it was intended as an alternate for the east or south trophy room. The comment is included below for reference.] A dark room called East Trophy Room is east of Domed Chamber. "This is a bare cubical stone chamber. Some worn black lettering on the wall reads: 'THE NORTH CHAMBER HAS SILVER LETTERING'. An archway exits west." The bare cubical stone chamber is in East Trophy Room. [See "North Trophy Room" for declaration of this backdrop.] The archway is in East Trophy Room. [See "Palace Entrance Hall" for declaration of this backdrop.] [KEEP - original code has below comment -- applies to East or South Trophy Room? found in between them. ! sigh: logic bug in rel 1. Try the following stmt below instead. Note ! that two solutions are possible in this case... ! on the wall reads: ~THE NORTH CHAMBER HAS GOLD LETTERING AND THE SOUTH \ ! CHAMBER IS THE SECOND TROPHY ROOM~. \ ] Section - Eastern Trophy Depression (Ekey_depression) A trophy depression called an eastern trophy depression is in East Trophy Room. Chapter - South Trophy Room (TROPHY_S) [See note at start of "East Trophy Room" above regarding a possible alternate riddle considered by Mr. Yu for this room.] A dark room called South Trophy Room is south of Domed Chamber. "This is a bare cubical stone chamber. Some worn black lettering on the wall reads: 'THE EAST CHAMBER HAS SILVER LETTERING AND I HAVE GOLD LETTERING'. An archway exits north." The bare cubical stone chamber is in South Trophy Room. [See "North Trophy Room" for declaration of this backdrop.] The archway is in South Trophy Room. [See "Palace Entrance Hall" for declaration of this backdrop.] Section - Southern Trophy Depression (Skey_depression) A trophy depression called a southern trophy depression is in South Trophy Room. Chapter - West Trophy Room (TROPHY_W) A dark room called West Trophy Room is west of Domed Chamber. "This is a bare cubical stone chamber. Some worn black lettering on the wall reads: 'EITHER I AM THE SECOND TROPHY ROOM AND THE NORTH CHAMBER IS THE LAST TROPHY ROOM, OR I HAVE GOLD LETTERING'. An archway exits east." The bare cubical stone chamber is in South Trophy Room. [See "North Trophy Room" for declaration of this backdrop.] The archway is in South Trophy Room. [See "Palace Entrance Hall" for declaration of this backdrop.] Section - Western Trophy Depression (Wkey_depression) A trophy depression called a western trophy depression is in West Trophy Room. Section - Worn Black Lettering (lettering) Some worn black lettering is a mass-nouned scenery backdrop. It is in North Trophy Room, East Trophy Room, South Trophy Room, and West Trophy Room. Understand "writing" as the worn black lettering. [Note that this unusual rule emulates the operation of the original source code's logic.] Instead of examining the worn black lettering (this is the examining the lettering reiterates room description rule): say the description of the location; say "[paragraph break]". Chapter - GUE Entrance (GUE_Gate) A room called GUE Entrance is north of City Streets. "You're standing under an open archway that has the letters 'GUE TECH' prominently displayed in twisted brass and copper. A busy street lies to the south, and the campus quad opens up to the north." Some letters and a quad are unimportant scenery things in GUE Entrance. An unimportant backdrop called a street is in GUE Entrance. Understand "busy" as the street when the location is GUE Entrance. Section - Archway (GUE_Arch) [Note that the adjective "elaborate" was added to this object to distinguish it from a different "archway" object in "Palace Entrance Hall" (ARAGAIN_Palace). Also note that the gate is named "Forburn" instead of "Froburn" in the original source code. There is no good reason to change this except the suspicion that it may have been a typo. If this was intended as a reference to a particular gate in a real college, my apologies to Mr. Yu.] A scenery backdrop called an elaborate archway is in GUE Entrance. Understand "arch" as the archway. The description of the archway is "It's an elaborate metal and stone affair that probably cost a fortune. On one side, an inscription reads 'Froburn Gate'." Understand "froburn" or "gate" or "metal" or "stone" or "inscription" as the elaborate archway. Instead of entering the elaborate archway (this is the treat entering archway as going north rule): try going north. Chapter - South Quad (GUE_QuadS) A room called South Quad is north of GUE Entrance. "You're walking across a grassy field. More lawn lies to the north, while an archway exits the area to the south. To the west is a low stone building with the word 'GYMNASIUM' etched in stone across the entrance. To the east is a old brick building covered in ivy." Some grass is an unimportant mass-nouned scenery vegetable-like backdrops in South Quad. Some ivy is an unimportant mass-nouned vegetable-like distant view in South Quad. A lawn and a grassy field are unimportant vegetable-like scenery backdrops in South Quad. Understand "fields" as the field. The archway is in South Quad. [See "GUE Entrance" for declaration of this backdrop.] Section - Old Brick Building A proxy entrance called an old brick building is in South Quad. The relevant direction of the old brick building is east. Understand "ivy-covered" or "covered in/with ivy" as the old brick building. Section - Low Stone Building A proxy entrance called a low stone building is in South Quad. The relevant direction of the low stone building is west. Understand "gymnasium" as the low stone building. An etched word is part of the low stone building. The description of the etched word is "'GYMNASIUM'". Understand "etching" or "etched in stone" as the etched word. Chapter - Center of Quad (GUE_Quad) [Note that the room synonym "building" has been rendered as a pair of proxy entrances in this implementation, and the "lintel" synonym as an part of one of them.] A room called Center of Quad is north of South Quad. "The center of the campus is a nicely tended green lawn with a bronze statue in the center. Paths lead north and south across grassy fields. To the west is a small brick building. To the east is a large stone building with a lintel roof and the words 'WOOMAX LIBRARY' inscribed across the entrance." The grass, the lawn, and the grassy field are in Center of Quad. [See "South Quad" for declaration of these backdrops.] [This logic is somewhat different in structure from the original source code, but it should show the same messages at the same frequencies. It is, however, less easy to expand this structure if you want to weight outcomes differently.] Every turn when the player is in Center of Quad (this is the students pass through the quad rule): if a random chance of 1 in 5 succeeds, say "Some students walk by. They must be [one of]upperclassmen, as they don't even look in your direction[or]underclassmen, as some of them look at you with puzzled expressions[purely at random]." Section - Small Brick Building A proxy entrance called a small brick building is in Center of Quad. The relevant direction of the small brick building is west. Section - Large Stone Building A proxy entrance called a large stone building is in Center of Quad. The relevant direction of the large stone building is east. Understand "woomax" or "library" as the large stone building. An unimportant thing called a lintel roof is part of the large stone building. Section - Bronze Statue (bronze_statue) A bronze statue is a scenery thing in Center of Quad. The description of the bronze statue is "An old bronze statue of a wise-looking man in wizard's clothes with a stern, disapproving look. An inscription at the base reads 'BELBOZ AT MITHICUS'." Chapter - North Quad (GUE_QuadN) [Note that some room synonyms in the original source code have been converted to proxy entrances in this implementation. Also note that the "low stone building" here has been converted to "long stone building" to prevent interference with a similar proxy entrance in South Quad.] A room called North Quad is north of Center of Quad. "You're walking across a grassy field. More lawn lies to the south, while a large building that resembles an auditorium of some sort is north. An inscription near the entrance reads 'ENCHANTER HALL'. To the west you see a small house-like building. To the east you see a long stone building, clearly new and rather modern-looking in contrast to its surroundings." The grass, the lawn, and the field are in North Quad. [See "South Quad" for declaration of these backdrops.] Section - Large Building A proxy entrance called a large building is in North Quad. The relevant direction of the large building is north. Understand "auditorium" or "hall" or "enchanter hall" as the large building. An inscription is part of the large building. The description of the inscription is "It reads: 'ENCHANTER HALL.'" Understand "sign" as the inscription. Section - Small House-Like Building A proxy entrance called a small house-like building is in North Quad. The relevant direction of the small house-like building is west. Section - Long Stone Building A proxy entrance called a long stone building is in North Quad. The relevant direction of the long stone building is east. Understand "new" or "rather" or "modern-looking" as the long stone building. Chapter - Gymnasium (GUE_Gym) A room called Gymnasium is west of South Quad. "There's a large field house here, filled with gym equipment and helpful rubber mats. The exit is east." [Note: In the original code, this was implemented via an I6 'Before' function. Since it does not seem intended to short-circuit the action, an I7 after rule is used here.] After jumping in Gymnasium (this is the jumping is an exercise when at the gym rule): say "You do a bit of exercise." Section - Equipment (gym_stuff) Some equipment is a mass-nouned scenery thing in Gymnasium. The description of the equipment is "Various things useful to those who exercise." Understand "mats" as the equipment. After pushing or pulling the equipment (this is the pushing or pulling is exercise when at they gym rule): say "You do a bit of exercise." Section - Flat Key (dorm_key) A key called a flat key is in Gymnasium. "Someone left a key here." Understand "dorm" as the flat key. The description of the flat key is "A flat metal key with '102' marked on one side." The size of the flat key is 5. Chapter - Humanities Building (GUE_Hum) A room called Humanities Building is east of South Quad. "You're in the humanities building, which is vacant and closed for the summer. The exit is west." Section - Introductory History Book (History_book) A book called an introductory history book is in Humanities Building. "Someone left a history book here." The description of the introductory history book is "It's a biography on the life and times of Duncanthrax the Bellicose. Most of it chronicles fairly dry stuff about his much publicized conquests of the Eastlands and his famous battles. There is an interesting bit about some secret trophy chamber that Duncanthrax had constructed near the end of his reign, but for more details, I'd suggest 'look up (word) in book' specifically." The size of the introductory history book is 15. Understand ["books" or] "textbooks" as the plural of the introductory history book. Instead of consulting the introductory history book about something when the number of unpunctuated words in the topic understood is greater than 1 (this is the history book has single-word topics only rule): say "The index is rather terse, try limiting your lookup to one word." [Note that the original source code logic combined all valid topics into a single function, but this implementation separates entries out as individual rules. Also note that the use of bold type in the Secret Trophy Room entry is at variance with the original test, which implied underlining of the word "black" in the phrase "with _black_ paint". Also note that there was no entry for Duncanthrax in the original.] After consulting the introductory history book about "duncanthrax/bellicose" (this is the it's duncanthrax all the way through rule): say "The whole book is about Duncanthrax! Try a less universal subject." After consulting the introductory history book about "secret/trophy" (this is the display Secret Trophy Room entry in history book rule): say "Apparently, in 680 GUE, Duncanthrax grew increasingly withdrawn.[paragraph break]At this time, of foremost importance to him was his collection of various battle trophies and awards he had bestowed to himself (for unusual valor on the field of battle) over the years. He decided to construct a hidden underground chamber south of Egreth to sequester this collection, which would be locked in a most clever means.[paragraph break]He decided to order the construction of a 'four-room key' which, when a miniature trophy was inserted and removed (once) in a special keyhole in each of the four rooms (in a specific order), would unlock a holding chamber in a center room containing his prized trophies.[paragraph break]Priding himself on his logic skills, he requested that two captured foreigners produce a logic puzzle plainly inscribed in the four key rooms themselves that would detail the exact order that the key rooms were to be 'applied'. A Prevaricon, who could not help but write untruths, was given a can of gold paint, while a Veritassi, who could only write the truth, was given a can of silver paint.[paragraph break]Imagine Duncanthrax's rage when he discovered that the two prisoners had secretly painted over their gold and silver key phrases with [bold type]black[roman type] paint! The prisoners were summarily executed, of course, but Duncanthrax sealed off the chamber and researchers can only guess at the final fate of the trophy collection of Duncanthrax." After consulting the introductory history book about "zilbo" (this is the display Zilbo entry in history book rule): say "Zilbo the third was overthrown in the great revolt led by Duncanthrax in 659 GUE. The biographers suggest reading their companion text, 'How Zilbo Came to Mithicus'." After consulting the introductory history book about "griffspotter/antharia" (this is the display Griffspotter entry in history book rule): say "In 665 GUE, Duncanthrax humiliated the Antharian naval Armada in the famous battle at Fort Griffspotter. (Well, okay, there's quite a bit more in the book about this battle, but remember, you're a priest, not a navy sailor.)" After consulting the introductory history book about "diablo/massacre" (this is the display Diablo Massacre entry in history book rule): say "In 666 GUE, Duncanthrax invaded Zorbel Pass in the Eastlands and severely trounced a local militia of trolls armed with clubs and garlic. The key significance of this victory on Duncanthrax's conquest of the Eastlands, as well as the immediate recall of all vampiric soldiers in Duncanthrax's military force, cannot be understated." After consulting the introductory history book about "ogre/battle/duel" (this is the display Ogre Duel entry in history book rule): say "In late 666 GUE, Duncanthrax was engaged in a fierce battle with forces near Globby Hills. In a brilliant tactical move, Duncanthrax goaded the opposing force into deciding the fate of the battle on a single duel -- himself versus their champion. Unfortunately for Duncanthrax, the Globby Hill champion turned out to be an Ogre of immense size.[paragraph break]In an attempted diversion, Duncanthrax was quoted as saying to the Ogre, 'It's all right, we're with Silvermane.' The Ogre was quoted as responding with 'Huh?'. Duncanthrax then, perhaps in a moment of sheer bravado, was heard to say 'Your shoes are untied.'[paragraph break]As the Ogre bent down to examine his unshod feet, Duncanthrax gave the signal, and the Ogre was buried under a massive pile of granola." After consulting the introductory history book about "silvermane" (this is the display Silvermane entry in history book rule): say "Silvermane, the book notes, was the name of Duncanthrax's pet Dire Wolf." After consulting the introductory history book about "index" (this is the display notable entries in history book index rule): say "There appear to be notable entries on 'trophy', 'Zilbo', 'Griffspotter', 'Diablo', 'Ogre', and 'Silvermane'." Last after consulting the introductory history book about something (this is the indicate no entry found in history book rule): say "You can't find anything interesting about that." Chapter - Cafeteria (GUE_Cafe) A room called Cafeteria is west of Center of Quad. "A small cramped area with lots of tables and chairs and food stains. The exit is east." Some tables, some chairs, and some food stains are unimportant scenery things in Cafeteria. Understand "table" as the tables. Understand "chair" as the chairs. Section - Mess (cafe_mess) [Note that, in the original source code, this object is given the I6 'static' property, which is equivalent to 'fixed in place' in I7. However, in this implementation, any object's associated I6 Before rules are converted to After rules when the text shown implies success of the action, as this does. As a result, this object cannot be fixed in place or the standard rules will intercept pushing and pulling action before it reaches the relevant After rule. I don't think that this will cause any problems, except possibly making the parser try implicit takes and the like, which will be blocked. Also note that in the original code this object made use of the I6 'general' attribute to track whether it had already been searched. The more descriptive condition 'rooted through' is used here.] A mess is in Cafeteria. "Someone must've had a late night recently, as there is quite a mess of coffee cups, napkins, and other junk on one table." The mess can be rooted through. Instead of taking the mess (this is the cafeteria mess is too big to carry rule): say "There's too much to carry." After rubbing or pushing or pulling or turning or touching or shaking the mess (this is the can't mess with the mess rule): say "You mess with the mess. Nothing happens." After searching the mess when the mess has not been rooted through (this is the one absent NPC's trash is an another adventurer's treasure rule): now the sugar cube is in the Cafeteria; now the can of decaf coffee is in Cafeteria; now the mess has been rooted through; say "You dig through the mess and find an unopened can of coffee and a sugar cube." Section - Sugar Cube (sugar_cube) [Note that the logic of the baking-related after rule here is part of the Baking_Pan object in the original source code. Also note the use of private-naming to allow conditional application of names.] There is an edible thing called a sugar cube. It is privately-named. The description of the sugar cube is "A perfect, featureless white cube (of sugar)." The size of the sugar cube is 5. Understand "sugar" as the sugar cube. Understand "cube" or "cube of" as the sugar cube when the sugar cube is not enpanned. Understand "quantity" or "quantity of" as the sugar cube when the sugar cube is enpanned. After inserting the sugar cube into the baking pan (this is the convert sugar cube to mess rule): now the printed name of the sugar cube is "quantity of sugar"; now the description of the sugar cube is "Some sugar scattered about."; say "You crumble the sugar cube into the pan." Section - Can of Decaf Coffee (decaf_coffee_can) [Note that the original source code this object was defined in FROSTHAM.INF but did not specify a game world location. A comment above the declaration notes that "(the coffee was moved to the cafe in Borphee)", and it is relevant to the action here, so I have moved it in this implementation. Also note the slight liberties taken with phrasing and display of description text.] There is a thing called a can of decaf coffee. The description of the can of decaf coffee is "The can reads:[paragraph break][fixed letter spacing] [2 spaces]Frobozz Magic Coffee Crystals[line break][4 spaces]Rich, mountain-grown flavor[line break][11 spaces]DECAFFEINATED[variable letter spacing]". The size of the can of decaf coffee is 15. Understand "decaffeinated" as the can of decaf coffee. To complain about the lack of a can opener: say "You'd need a good can-opener for that." Instead of opening the can of decaf coffee (this is the can't open the coffee with your hands rule): complain about the lack of a can opener. Chapter - Library (GUE_Library) [Note that this object made use of various logic attached to the I6 w_to property to prevent the player from leaving with the marked scroll, including nested objectloops to look for a wily player trying to smuggle it out in a container. This implementation handles the relevant logic using I7's 'encloses' relation and an instead rule.] A room called Library is east of Center of Quad. "A student library is here, filled with various texts. The exit is west." Instead of going west from Library while the player bears the pen-marked scroll and the librarian is not mistaken about identity (this is the can't take marked scroll from library without checking it out rule): say "An [first time]all-too-typical [only]invisible force stops you as you try to leave. The librarian doesn't look up, but merely says, 'If you want to check something out, I'll need to see some ID first.'" Section - Pen-Marked Scroll (marked_scroll) A scroll called a pen-marked scroll is in Library. "There's a pen-marked scroll sitting amongst some books here." Understand "marked" as the pen-marked scroll. The pen-marked scroll is inscribed with taclor. Section - Wrinkled Magazine (magazine_lib) A wrinkled magazine is in Library. "There's a wrinkled magazine ('US News and Dungeon Report') here." It is papery. The description of the wrinkled magazine is "SPIRITWRAK Author notes:[line break]3/96 -- Initial (beta) release. Functionally complete, some nagging bugs and typos may still be present.[line break]4/96 -- Second release. Reported bugs fixed. A few puzzles added, some removed.[line break]6/96 -- Third release. Bug fix release.[paragraph break]SPIRI7WRAK Author notes:[line break]Oct 2012 -- project begun[line break]May 2014 -- alpha completed[line break]Oct 2014 -- beta completed[line break]Nov 2014 -- beta release[line break]Dec 2014 -- release 1". The size of the wrinkled magazine is 15. Section - Librarian (librarian) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether the clean ID card had been shown to the librarian. This implementation uses the more descriptive property "mistaken about identity".] The librarian is an open-inventoried woman in Library. The description of the librarian is "A young woman with short dark hair and gold-framed glasses." The librarian can be mistaken about identity. Understand "student" or "Stephanie" as the librarian. Some short dark hair is an unimportant mass-nouned thing part of the librarian. The librarian wears an unimportant thing called some gold-framed glasses. The gold-framed glasses have indefinite article "a pair of". Understand "pair" or "pair of" or "her glasses" or "Stephanie's glasses" or "librarian's glasses" as the gold-framed glasses. [Since the message for the rules below imply that the player has just barely started casting but we also want to make sure that it is a legal situation for gnusto (the most likely initial spell attempt), these are constructed as check rules with placement that prevents loss of the memorized spell during the check rules evaluation.] To say librarian interferes: say "The librarian frowns as you start to chant. 'Quiet! This is a library, you know,' she says." Check casting a spell when the librarian is at hand (this is the no casting in library rule): say "[librarian interferes]"; rule fails. The no casting it at in library rule is listed after the can't cast if not memorized rule in the check casting rules. Check casting a spell at something when the librarian is at hand (this is the no casting it at in library rule): say "[librarian interferes]"; rule fails. The no casting it at in library rule is listed after the can't cast it at if not memorized rule in the check casting it at rules. To discourage aggression against the librarian: say "Attacking librarians is not very becoming of a priest." Instead of attacking the librarian (this is the overdue book fees aren't worth a prison sentence rule): discourage aggression against the librarian. Instead of throwing something at the librarian (this is the anti-librarian ballistics are improper rule): discourage aggression against the librarian. Instead of showing or giving the pair of thick glasses to the librarian (this is the librarians are always bespectacled rule): say "'Thanks, no. I already have a pair.'" Instead of showing or giving the dirty ID card to the librarian (this is the Stephanie wants her ID back rule): now the librarian carries the dirty ID card; say "The librarian snatches the ID out of your hand. 'Where[']d you get my ID?' she says. 'I've been looking for it everywhere.'" Instead of showing or giving the clean ID card to the librarian when the librarian is mistaken about identity (this is the perhaps Harold habitually introduces himself by presenting identification documents rule): say "The librarian peers at the ID you are holding. 'Hi again, Harold,' she says." Instead of showing or giving the clean ID card to the librarian when the librarian is not mistaken about identity (this is the library identification policy isn't very strong rule): now the librarian is mistaken about identity; say "The librarian peers at the ID in your hand. 'Hi, Harold,' she says. 'I heard you were going to be away for a least two more years. Got tired of Mithicus, eh? Well, anyway, remember to return anything you borrow after summer session is over.' She scribbles something down in a notebook." This is the librarian default life behavior rule: say "The librarian is currently too busy cataloging books." Instead of doing something when the current action is generic life behavior and the current action involves the librarian (this is the librarian generic life rule): abide by the librarian default life behavior rule. Persuasion rule for asking the librarian to try doing something (this is the reroute understood orders to librarian to generic life response rule): consider the librarian default life behavior rule; rule fails. After blowing the plastic whistle when the librarian is at hand (this is the now who's annoyed with whom rule): say "You make an unusually high-pitched noise. The librarian frowns. 'Please! This is a library, you know.'" After yelling when the librarian is at hand (this is the librarians don't like being yelled at rule): say "The librarian frowns. 'Please! This is a library, you know.'" After sneezing when the librarian is at hand (this is the librarians are also health monitors rule): say "'You should see the school nurse about that cold.'" Chapter - Dorms (GUE_Dorms) [Note that the original source code simply has the message about wandering as its I6 'w_to' property. As the message shown when trying to go west implies success in going west, a self-connection on the western side of this room was added to facilitate creation of the relevant After rule.] A room called Dorms is west of North Quad. "You're in a short hallway inside some student dormitories. The exit is east." Dorms is west of Dorms. After going from Dorms to Dorms (this is the western part of dorms is uninteresting rule): say "You wander the halls a bit and return here." Section - Northern Door (dorm_doorN and dorm_doorN2) [Note that, in the original source code, both this door (dorm_doorN) and its paired companion (dorm_doorN2) were conventional I6 door objects whose behavior was linked through code. However, several pieces of logic have been hard-wired to doors in I7, including scope rules that allow them to be seen and interacted with from either side. Since the separate door objects do not seem important to gameplay, this implementation uses a normal I7 door but has to adjust the initial appearance property and its description appropriately to allow it to behave as intended from the northern side.] A locked door called the northern door is north of Dorms and south of Dorm Room. "There's a[if not open] closed[else]n open[end if] door to the [direction of the northern door from the location]." The description of the northern door is "[if the location is Dorms]A wooden door with a keylock. A note attached to it says 'DOING WORK ABROAD'[otherwise]An unremarkable wooden door[end if]." Understand "north door" as the northern door. The northern door is unlocked by the flat key. Instead of locking the northern door with something while the player is in Dorm Room (this is the can't lock dorm doors from inside rule): say "You can't lock the door from this side." Instead of unlocking the northern door with something while the player is in Dorm Room (this is the can't unlock dorm doors from inside rule): say "You can't unlock the door from this side." Section - Southern Door (dorm_doorS) A lockable door called the southern door is south of Dorms. "There's a closed door to the south." The description of the southern door is "A wooden door with a keylock. A note attached to it says 'BEWARE OF DOG'." Understand "south door" as the southern door. After opening the southern door (this is the adventurers never believe warning signs rule): say "As you open the door, an enormous hellhound jumps out! The unusual watchdog creeps back into the room and closes the door -- after having mauled you to pieces, of course."; end the game in death. Section - Dirty ID Card (GUE_ID1) A dirty ID card is in Dorms. The description of the dirty ID card is "A slightly dirty ID card. There's a picture of some woman with short dark hair and glasses, and the name 'Stephanie' on the front." The size of the dirty ID card is 5. Understand "cards" or "ids" or "id cards" as the plural of the dirty ID card. Chapter - Dorm Room (GUE_dormroom) A room called Dorm Room is north of the northern door. "A cramped room, mostly empty, with some bare furnishings." Section - Furnishings (dormroom_furnishings) [Note that, in the original source code, this bit of color was commented out and the keywords for it were linked to the room object, making them unimportant. This implementation takes the liberty of restoring them.] Some bare furnishings are scenery things in Dorm Room. The description of the bare furnishings is "Minimal furnishings -- a desk and chair, a small bed. Almost reminds you of the Monastery." Understand "desk" or "chair" or "bed" or "minimal" as the bare furnishings. Section - Textbook (textbook) [Note: This object presented a small challenge. In the original source code, it is given the I6 'openable' property. However, in I7 this property is not allowed for generic things. Trying to engineer openable and open properties for all things as a class seems like a dangerously sloppy way to enable this special case. While it would be straightforward to create an Instead rule to simulate the book being opened, this implementation tries to stick to the style that actions with implicitly successful messages actually result from successful actions. To resolve all these conflicts, the object is implemented as an I7 container, and a zero carrying capacity is specified. Also note that this object originally made use of the I6 'general' attribute to track whether the player had opened it. In this implementation, the same logic is handled using I7's inherent state memory. Finally, note that, because of its weirdness, this is not a member of the book kind.] A textbook is an openable closed container in Dorm Room. "A forgotten textbook is lying in one corner of the room." The textbook is openable. Understand "text book" or "book" as the textbook. The description of the textbook is "[if not open]The cover reads 'Ancient Mythology'.[otherwise]'A colorful myth among ancient races has been called [']The myth of the Four Brothers['] by Elder Kroonwatz (the famous Royal Chronicler). The story states that at the dawn of time, four evil gods, who were brothers, sought dominance over that which would become our world. Great battles were fought between forces of light and darkness, and these brothers were often victorious.[paragraph break]Fortunately for us, they could not cooperate with each other, and fought amongst themselves in petty power struggles, driven individually by power and greed. Indeed, legends state that, on occasion, the brothers would seek ways to actually destroy their own siblings, along with the forces of good. [paragraph break]One brother constructed a strange artifact that would have given him great power, but was discovered by agents of good. He was imprisoned within the very object he built. The remaining three, facing certain defeat without the combined strength of their trapped brother, fled into planes unknown, but made a pact that, if the brother were ever freed and the artifact of power returned to him, the four would agree to make their final attack against the forces of good.[paragraph break]Kroonwatz points out the obvious parallels with various other mythologies that foretell the end of the known world.'[end if]". The size of the textbook is 15. The carrying capacity of the textbook is 0. Understand "books" or "textbooks" as the plural of the textbook. After opening the textbook when the textbook had not been open (this is the opening the textbook the first time reveals the clean ID card rule): move the clean ID card to the holder of the player; say "As you open the book, a small card flies out and lands at your feet." Section - Clean ID Card (GUE_ID2) There is a clean ID card. The description of the clean ID card is "An ID card with a picture of some young student and the name 'Harold' written on the front." The size of the clean ID card is 5. Understand "cards" or "ids" or "id cards" as the plural of the clean ID card. Chapter - Enchanter Hall Top (GUE_Enchanter_hall) A room called Enchanter Hall Top is north of North Quad. "You're at the top of a large auditorium which is empty. You can walk down a long aisle to the front of the hall, or out to the south." The printed name of Enchanter Hall Top is "Enchanter Hall (top)". Some aisles are an unimportant scenery backdrop in Enchanter Hall Top. Understand "aisle" as the aisles. An unimportant scenery backdrop called some seats is in Enchanter Hall Top. Chapter - Enchanter Hall Bottom (GUE_Enchanter_hall_front) [Note the slight change in description of this room compared to the original source code.] A room called Enchanter Hall Bottom is down from Enchanter Hall Top. "You're at the very front of a large but poorly-lit auditorium. Empty aisles lead up and away to the south, between row upon row of vacant seats focused on the stage-like area where you now stand[if hall switch is switched on]. A soft, dim glow highlights your current area[end if]." The printed name of Enchanter Hall Bottom is "Enchanter Hall (bottom)". Some aisles and some seats are in Enchanter Hall Bottom. [See "Enchanter Hall Top" for declaration of these backdrops.] Section - Hall Switch (hall_switch) [Note that, in the original source code, this object is given the I6 'switchable' property. To provide a simplified adaptation, it is here implemented as an I7 'device' kind, which includes switching on/off as built-in behavior. Also note that it made use of the I6 'general' attribute to track having been turned on the first time. In this implementation, the same logic is handled using I7's inherent state memory. Finally, note the change in the initial appearance compared to original, since there doesn't seem to be anything unusual about the switch.] A fixed in place device called a hall switch is in Enchanter Hall Bottom. "There's a small switch in the wall here." The description of the hall switch is "A small switch in the far wall." Understand "light" as the hall switch. To announce the activation of overhead lights: say "You hear a click. A dim light now makes the nearby area less gloomy." After switching on the hall switch when the hall switch was switched off (this is the describe turning on the lights in Enchanter Hall rule): announce the activation of overhead lights. After switching on the hall switch when the hall switch had not been switched on (this is the having the temerity to turn on the lights implies you are a professor rule): announce the activation of overhead lights; now the notebook is on the large desk; say "[line break]A student creeps out of the shadows. He looks at you sheepishly. 'Sorry I haven't been to class all semester, Professor,' he begins. 'Anyway, here's my final paper.'[paragraph break]He puts a notebook on the desk. 'All this stuff about the new [']science['] -- I don't know what all the fuss is about. Magic was okay too, wasn't it? There's a part in my conclusion where --' He stops and looks at the notebook. 'Well, anyhow.' he says, and disappears back into the shadows." Instead of switching on the hall switch when the hall switch is switched on (this is the special notice for trying to turn on the hall switch when already on rule): say "It seems to be on already." After switching off the hall switch when the hall switch was switched on (this is the describe turning off the lights in Enchanter Hall rule): say "With a snap of the switch, the dim light fades." Instead of switching off the hall switch when the hall switch is switched off (this is the special notice for trying to turn off the hall switch when already off rule): say "It seems to be off already." Section - Large Desk (hall_desk) A fixed in place supporter called a large desk is in Enchanter Hall Bottom. The description of the large desk is "A long desk sits in the middle of this area." The carrying capacity of the large desk is 30. Understand "long" as the large desk. Section - Notebook (notebook) [Note that object did not have an initial appearance in the original source code. It is given one because its default room description is a little ugly.] There is a closed openable container called a notebook. The initial appearance of the notebook is "[An item described] lies timidly on [the large desk] here." The description of the notebook is "A plain white notebook with some loose pages." The size of the notebook is 10. Instead of inserting something into the notebook when the noun is not a scroll and the noun is not the term paper (this is the notebook can only contain scrolls or the term paper rule): say "You can't put that into the notebook." Section - Term Paper (term_paper) A term paper is in the notebook. It is papery. The description of the term paper is "'Magic, so what's it good for?' by Wilbur Lunchbox. It's a long-winded, haphazard essay about the virtues of magic in a time of science. Some of the topic sentences are particularly clumsy. However, there's an insightful bit at the end about how under certain circumstances, magic and science become indistinguishable." The size of the term paper is 10. Chapter - Science Center (GUE_Labs) A room called Science Center is east of North Quad. "You are in a short hallway of some new building. The words 'SCIENCE CENTER' are painted on one wall. The hallway opens to rooms to the east, or you can escape to the west." Some words are unimportant scenery in Science Center. Chapter - Engineering Labs (GUE_Labs_Eng) A room called Engineering Labs is east of Science Center. "You shudder as you look around this area. Clearly a place of science, piles of heavy machinery and strange delicate-looking tools and artifacts are everywhere here. Hallways run west and east." Some machinery is unimportant mass-nouned scenery in Engineering Labs. Some tools and some artifacts are unimportant scenery in Engineering Labs. Section - Research Paper (wood_book) A research paper is in Engineering Labs. It is papery. The description of the research paper is "'On the Structural Strength of Woods', a short, fairly dry research paper. Apparently, the researcher was testing the breaking point of various woods. The conclusions reached are summed up in the final paragraph:[paragraph break]'In summary, our findings indicate that out of the materials tested, ebony wood is clearly the best choice, and balsa wood clearly the worst.[paragraph break]Balsa wood structures broke immediately when even the slightest weight was tested on them. Pine wood structures fared slightly better, holding light weights, but tended to break on repeated stress. Ebony wood structures were approximately twice as strong as pine structures, holding up to at least one repeated stress test before breaking.'" The size of the research paper is 15. Section - Lab Door (GUE_Lab_door) A locked door called a lab door is south of Engineering Labs. "There's a[if the lab door is open]n open[else] closed heavy[end if] metal door to the [direction of the lab door from the location]." The description of the lab door is "A large door made of some shiny hard metal. There are no obvious handles or hinges." The lab door has a number called lock combination. To decide what number is the hundreds part of (N - a number): let X be the remainder after dividing N by 1000; [eliminate digits to left of hundreds place] decide on X divided by 100. [integer division automatically rounds down] To decide what number is the tens part of (N - a number): let X be the remainder after dividing N by 100; [eliminate digits to left of tens place] decide on X divided by 10. [integer division automatically rounds down] To decide what number is the ones part of (N - a number): let X be the remainder after dividing N by 10; [eliminate digits to left of ones place] decide on X. To randomize the lab door combination: now the lock combination of the lab door is a random number between 1 and 999; [note: don't want to allow zero or puzzle is pre-solved!] now the target setting of the left dial is the hundreds part of the lock combination of the lab door; now the target setting of the center dial is the tens part of the lock combination of the lab door; now the target setting of the right dial is the ones part of the lock combination of the lab door. When play begins (this is the give lab door a random combination on game start rule): randomize the lab door combination. After closing the lab door (this is the closing the lab door resets lock dials rule): repeat with scrambled dial running through combination-dials that are part of the set of dials: now the current setting of scrambled dial is zero; now the lab door is locked; randomize the lab door combination; say "You close the door and hear some mechanisms spin." Section - Set of Dials (special_lock) [In the original source code this is given the I6 'transparent' attribute to ensure that the dials were accessible, but no equivalent is declared here due to the way that the default visibility rules for things part of other things are set up in I7.] A set of dials is in Engineering Labs. "There's an odd set of dials in the wall near the metal door." The set of dials is fixed in place. The description of the set of dials is "Three dials are in a left-to-right row. Above each dial is a tiny square window with some number visible behind it. The windows currently read: '[dial settings]'.[paragraph break]Right next to the set of dials is a small green button. Letters right above the dials read: 'FrobozzCo'." To say dial settings: repeat with enumerated dial running through combination-dials incorporated by the set of dials: say "[current setting of enumerated dial]". Section - Left Dial (left_dial) [Note that some logic found in this object in the original source code have been moved to the kind definition in this implementation. See "Dial" under "New Kinds".] A combination-dial called a left dial is part of the set of dials. The relative position of the left dial is left. Section - Center Dial (center_dial) [Note that some logic found in this object in the original source code have been moved to the kind definition in this implementation. See "Dial" under "New Kinds".] A combination-dial called a center dial is part of the set of dials. The relative position of the center dial is center. Section - Right Dial (right_dial) [Note that some logic found in this object in the original source code have been moved to the kind definition in this implementation. See "Dial" under "New Kinds".] A combination-dial called a right dial is part of the set of dials. The relative position of the right dial is right. Section - Green Button (green_button) A green button is part of the set of dials. The description of the green button is "A small green button next to the dials." [This logic was actually something of a challenge. The rather brute-force approach in the original source code did not have a structure that seemed desirable to replicate here, and the design goal was to create something more elegant and generic that would also allow randomization of the combination instead of the original hardcoding. This implementation is not super elegant, but its structure could readily be expanded to include additional dials for longer combinations, and randomized combinations are enabled, so it does demonstrate a small amount of improvement.] After pushing the green button when the lab door is open (this is the stop playing with the dials now please rule): say "You hear a short buzzing noise." Definition: A combination-dial is uncounted if it is incorporated by the set of dials and it is not yet evaluated. After pushing the green button when the lab door is closed (this is the let's play mastermind rule): [Use a pair of lists to track the sets of complete and partial matches.] now every combination-dial incorporated by the set of dials is not yet evaluated; [reset evaluation states] let complete-matches be a list of numbers; let partial-matches be a list of numbers; [Populate list of complete matches.] repeat with checked dial running through uncounted combination-dials: if the checked dial is correctly set: add the current setting of the checked dial to complete-matches; now checked dial is already evaluated; [Populate list of partial matches.] let unmatched-list be a list of numbers; [create pool of unmatched numbers, in case there are multiple matches to one target] repeat with scanned dial running through uncounted combination-dials: add the target setting of scanned dial to unmatched-list; [ say "(unmatched list = [unmatched-list])";] repeat with rescanned dial running through uncounted combination-dials: let early break be false; if the current setting of rescanned dial is listed in unmatched-list: add the current setting of rescanned dial to partial-matches; [ say "(gently removing [current setting of rescanned dial] from [unmatched-list])";] repeat with i running from 1 to the number of entries in unmatched-list: if entry i of unmatched-list is the current setting of rescanned dial: remove entry i from unmatched-list; [ say "(now unmatched-list is [unmatched-list])";] now early break is true; [signal break to outer loop] break; [stop inner loop after first partial match discovered] if early break is true: break; [don't continue to check this dial against other dials if there was an early break] [Open the door or provide feedback to player.] if the number of entries in complete-matches is 3: now the lab door is unlocked; now the lab door is open; accomplish mastermind; say "You hear three clicks, and the door swings open!"; else if complete-matches is empty and partial-matches is empty: say "Nothing happens."; otherwise: say "You hear"; if complete-matches is non-empty, say " [if number of entries in complete-matches is 1]a single[else][number of entries in complete-matches in words][end if] click[if number of entries in complete-matches is at least 2]s[end if]"; if complete-matches is non-empty and partial-matches is non-empty, say " followed by"; if partial-matches is non-empty, say " [number of entries in partial-matches] thunk[s]"; [ say " (c = [complete-matches], p = [partial-matches])";] say "." Chapter - Office (GUE_Labs_Office) A room called Office is east of Engineering Labs. "You're in a small office of some sort. The only exit is west." Section - Desk (Lab_desk) A fixed in place supporter called a desk is in Office. "A small desk sits in one corner here." The description of the desk is "It's quite tiny, really." Section - Lab Journal (Lab_journal) [Note that spaces inserted directly into the lab journal's description text were not being reproduced reliably, so the following trick from the recipe book is used to force precise spacing.] To say (N - a number) spaces: [Recipe Box Ex. 431] repeat with index running from 1 to N: say " ". A lab journal is on the desk. The description of the lab journal is "Some loose handwritten pages read:[paragraph break][fixed letter spacing]'...DAY 14) We've put the artifact in the south lab. Still[line break][13 spaces]no idea what it does, but I'm sure I can find[line break][13 spaces]some lab student who can figure it out.[paragraph break][4 spaces]DAY 20) My lab assistant Peabody believes that it's[line break][13 spaces]some sort of [']mystical gate[']. Clearly this is[line break][13 spaces]hogwash. However, my grant has been awarded,[line break][13 spaces]so I have allowed Peabody to continue work.[paragraph break][4 spaces]DAY 25) Peabody demonstrated something fantastic today.[line break][13 spaces]He took my briefcase and put it on the artifact[line break][13 spaces]and in a white flash, it was gone![paragraph break][4 spaces]DAY 27) This is my last entry. I am leaving the University[line break][13 spaces]tomorrow. Peabody, in my request to retrieve my[line break][13 spaces]briefcase, stepped onto the artifact, and was gone![line break][13 spaces]I've read his recent research notes, and if he's[line break][13 spaces]right, he's now lost in a place unimaginable! I've[line break][13 spaces]locked the artifact away and destroyed the[line break][13 spaces]combination -- I pray no one ever sees it again!'[paragraph break][variable letter spacing](The journal breaks off here.)". The size of the lab journal is 15. Chapter - Strange Lab (GUE_Labs_Secret) A room called Strange Lab is south of the lab door. "This is an odd room, cramped even by lab standards. The place seems to have been cleared out recently." Section - Strange Contraption (Atrii_gate) [Note that this object is declared in SPECIAL.INF in the original source code. It is moved here for convenience of reference.] A fixed in place enterable supporter called a strange contraption is in Strange Lab. The description of the strange contraption is "It looks like a large, slightly convex round disc made of some silvery material." Understand "plate" or "disc" or "silver" or "silvery" as the strange contraption. Instead of pushing or pulling or touching or taking the strange contraption (this is the strange contraption behaves strangely rule): say "As you reach for the strange contraption, shimmering white sparks arc from the silver surface to your fingers! You hastily draw back." After putting something on the strange contraption (this is the things go on things go up rule): now the noun is in Atrii One; say "[The noun] disappears in a bright flash of light as you place it on the silver disc!" [See note in section "Prison Cell" for a technical note about the original source code logic producing the following message.] After entering the strange contraption (this is the beam me up Scotty rule): say "As you step onto the silvery disc, you feel a strange jolt run through your body. A bright, white flash blinds you momentarily![paragraph break]You blink, trying to register your surroundings.[line break]"; now the player is in Atrii One. Part - Frostham [FROSTHAM.INF] Section - Walkable Frostham There is a region called Walkable Frostham. Instead of going nowhere from Walkable Frostham when the noun is a cardinal direction (this is the some parts of Frostham aren't that interesting rule): say "You walk around the local area a bit, finding nothing of interest." Chapter - Frostham Outskirts (FROSTHAM_Outskirts) [Note that this object made use of the I6 'general' attribute to extend the description the first time the player arrives. In this implementation, an every turn rule using I7's inherent state tracking is employed instead.] A room called Frostham Outskirts is south of Valley Trail. "You are at the northern outskirts of Frostham. The city proper is to the south. A few snow-covered residences are nearby.[paragraph break]A trail leads into a valley to the north." Frostham Outskirts is in Walkable Frostham. The view of the city is in Frostham Outskirts. [See "New Borphee Outskirts" for declaration of this backdrop.] The trail is in Frostham Outskirts. [See "Flower Garden" for declaration of this backdrop.] Some residences are unimportant scenery in Frostham Outskirts. The snow is in Frostham Outskirts. [See "Snow" for declaration of this backdrop.] An unimportant scenery thing called a valley is in Frostham Outskirts. Every turn when the player is in Frostham Outskirts and the player had not been in Frostham Outskirts (this is the first arrival at Frostham Outskirts triggers memory rule): say "The last time you saw Frostham was before you entered the Monastery -- many years ago at least. Oddly, it seemed bigger and less desolate then." Chapter - Frostham (FROSTHAM_2) [Note that, in the original source code, the following object had an I6 'each_turn' property to execute the seesaw puzzle's CheckHall() routine, with a comment indicating this was to make sure that a player returning to the store would see the updated state. This implementation has similar logic, but it is triggered by entry into the Store Interior region, which the General Store location is a part of, so a check is not needed here.] A room called Frostham is south of Frostham Outskirts. "You are in Frostham City, the famous winter-lover's haven. The once booming ski vacation spot seems to be a bit more run-down than in times past. The city thins out towards the north, while another section of town is to the south. To the west is a large wooden structure. To the southwest is a small building. To the southeast is another small building, possibly a store." Frostham is in Walkable Frostham. Inside from Frostham is nowhere. [To counteract assumptions due to new outside directions in Frostham building rooms.] Section - Large Wooden Structure A proxy entrance called a large wooden structure is in Frostham. The relevant direction of the large wooden structure is west. Section - Small Building A proxy entrance called a small building is in Frostham. The relevant direction of the small building is southwest. The printed name of the small building is "small building to the southwest". Understand "southwestern" or "to the southwest" as the small building. Section - Possible Store A proxy entrance called a possible store is in Frostham. The relevant direction of the possible store is southeast. Understand "other" or "small building" or "southeastern" or "to the southeast" as the possible store. Chapter - Special Stuff for Seesaw Puzzle [This puzzle actually turned out to be a huge hassle, even though it was expected to be pretty simple in I7. The internal handling of pushing things from room to room in the I7 standard rules does not seem to do a very good job of tracking the associated world-state changes in a logical way -- I get the impression the object gone with is magically transported to the new location very late in the action processing rules and not at the same time as the player, since it's not there while after rules are processed and doesn't appear in room descriptions.] Store Interior is a region. Puzzle Hallway is a region. Puzzle Hallway can be activated or inactivated. Puzzle Hallway is in Store Interior. Instead of jumping while the player is in Puzzle Hallway (this is the jumping on seesaws is generally inadvisable rule): say "You jump for a bit. The floor feels strangely unsteady." [This was a bit of a pain. Based on testing, it appears that pushing something between rooms is handled in a very odd way. By the time after rules are processed, the player has been relocated but the thing pushed with the player is not there yet. Complicating things further, the action of pushing is converted into a going action, so there is no obvious way (at least based on what's documented in WWI) to reference or examine the pushed item since the noun is reset to a direction and the second noun to nothing. Per the I7 standard rules, there is an action variable for the going action called the "thing gone with" that should serve this purpose, but trying to use it always resulted in errors. Fortunately, I spotted the "item-pushed-between-rooms" name that can be used here, which is associated to the low-level I6 'move_pushing' variable and from which the "thing gone with" is set.] To decide what number is the effective weight of (seesaw end - a seesaw room): let estimated weight be the number of crates in seesaw end; if the player is in seesaw end, increase estimated weight by two; [Next if statement compensates for odd limbo state of thing gone with in I7 standard rules action processing.] if the item-pushed-between-rooms is not nothing and the seesaw end is the location, increment estimated weight; decide on estimated weight. This is the physics works on seesaws rule: now the previous elevation of North End of Hallway is the current elevation of North End of Hallway; now the previous elevation of South End of Hallway is the current elevation of South End of Hallway; let north weight be the effective weight of North End of Hallway; let south weight be the effective weight of South End of Hallway; [ say "[line break](effective weight north = [north weight], effective weight south = [south weight])[line break]";] if north weight is greater than south weight: now the current elevation of North End of Hallway is lowered; now the current elevation of South End of Hallway is raised; else if the north weight is less than south weight: now the current elevation of North End of Hallway is raised; now the current elevation of South End of Hallway is lowered; else: [hopefully this case only occurs when weights are even, so condition not spelled out] now the current elevation of North End of Hallway is balanced; now the current elevation of South End of Hallway is balanced; abide by the seesaw map connection adjustment rule. This is the seesaw map connection adjustment rule: change the south exit of the room north from North End of Hallway to nothing; if the current elevation of North End of Hallway is lowered: change the north exit of North End of Hallway to General Store; change the south exit of General Store to North End of Hallway; else if the current elevation of North End of Hallway is balanced: change the north exit of North End of Hallway to Stockroom; change the south exit of Stockroom to North End of Hallway; else if the current elevation of North End of Hallway is raised: change the north exit of North End of Hallway to Attic; change the south exit of Attic to North End of Hallway. After going to a room in Store Interior while Puzzle Hallway is activated (this is the change seesaw state when moving in store interior rule): abide by the physics works on seesaws rule; continue the action. An elevation is a kind of value. The elevations are raised, balanced, and lowered. A seesaw room is a kind of room. A seesaw room has an elevation called current elevation. A seesaw room has an elevation called previous elevation. [These next two rules aren't very elegant, but the more elegant version (using "to decide which room is the other end of the seesaw: decide on a random room in Puzzle Hallway that is not the location" and using "try going best route from the location to the other end of the seesaw instead" was causing noticeable pauses when executing and/or not working reliably (seemed like sometimes other end of the seesaw evaluated to nothing, since it would arbitrarily trigger the I7 standard "block vaguely going" rule). They are niceties, anyway, since the same behavior does not occur in the original.] Instead of going up when the location is a seesaw room and the current elevation of the location is lowered (this is the going up from lowered end means go to raised end rule ): if the player is in North End of Hallway, try going south instead; try going north instead. Instead of going down when the location is a seesaw room and the current elevation of the location is raised (this is the going down from raised end means go to lowered end rule ): if the player is in North End of Hallway, try going south instead; try going north instead. [Note that original attempts to set up the following rule using a test of "the location" or "holder of the player" did not work. Per the note at the end of WWI 9.13, the implication is that "was"-based descriptions are interpreted on the basis of what *all* relations were at the start of the turn, thus the "is"-based holder of the player (room being entered) is a different room than the "was"-based holder of the player (room being left). Annoyingly, you can't test the state of a temporary value, so trying to set up a rule along the lines of "After going to a room (called the current end of the seesaw)..." won't work, either, though I do appreciate the reasoning behind this. This also rules out setting up a new adjective with a definition to define whether a particular room is "descending" a la "Definition: A room is descending if it is lowered and it was not lowered." or a "to decide whether or not (seesaw end - a room) is descending:..." using any type of "was" comparison. In the end I just had to implement some extra state (previous elevation) in a special kind of room (seesaw room), which involved reworking a bunch of minor stuff. The apparent inability to reference the past state of an object described by a current relation seems like something that might be worth addressing in future versions of I7.] To decide whether (moving room - a seesaw room) descends: if the current elevation of moving room is lowered and the previous elevation of moving room is not lowered, yes; if the current elevation of moving room is balanced and the previous elevation of moving room is raised, yes; no. After going to a seesaw room (called new end of seesaw) while Puzzle Hallway is activated (this is the notify player of drops rule): if new end of seesaw descends: say "You hear a low grinding noise. The hallway underfoot suddenly shifts and drops!"; continue the action; otherwise: continue the action. The notify player of drops rule is listed after the change seesaw state when moving in store interior rule in the after rulebook. Chapter - General Store (FROSTHAM_Store) A room called General Store is southeast of Frostham. "This appears to be a small grocery store, strangely abandoned at the moment. Shelves line the walls, although, since no one is minding the store, the current stock seems to be a bit depleted. You notice an exit south marked 'EMPLOYEES ONLY' that appears to lead to [if the current elevation of North End of Hallway is lowered]some hallway[else]a dark hole[end if]. The way back out is to the northwest." Outside from General Store is Frostham. Some current stock is unimportant mass-nouned scenery in General Store. Some shelves are unimportant scenery in General Store. General Store is in Store Interior. Instead of going northwest from General Store with a crate (this is the crates can't leave the store rule): say "A portion of the door seal blocks the crate from going outside." Instead of going nowhere from General Store when the noun is south and the current elevation of North End of Hallway is not lowered (this is the can only enter the seesaw from General Store when north end is lowered rule): say "You pull back before falling into what appears to be a deep pit of some sort beyond the south exit." [Note that the notification below is shown *before* the room description in release 3/960606, whereas here it is shown after. This is mostly because it and the puzzle machinery are governed by every turn rules in this implementation, whereas in the original source code it is an I6 After() rule for the I6 Go action. It would be possible to mimic the original more slavishly here, but doing it this way leaves more leeway for elaboration and/or modification, ensuring other actors will get a chance to modify the hallway's state prior to the determination of what the balance will be.] Every turn while Puzzle Hallway is activated and the location is General Store and the current elevation of North End of Hallway is not lowered and the current elevation of North End of Hallway was lowered (this is the seesaw oops as seen from General Store rule): say "You hear a grinding noise from behind you." Section - Dusty Crate (BARREL1) A crate called a dusty crate is in General Store. The description of the dusty crate is "A dust-covered crate." Section - Moldy Crate (BARREL2) A crate called a moldy crate is in General Store. The description of the moldy crate is "A mold-covered crate." A fungus-like mass-nouned thing called some mold is part of the moldy crate. Instead of casting throck at the moldy crate (this is the treat casting throck at crate as casting throck at crate's mold rule): try casting throck at the mold instead. After casting throck at the mold (this is the throck won't make mold grow rule): say "The spell's energy swirls briefly around the mold before dissipating. Mold is a fungus, not a plant." Section - Filthy Crate (BARREL3) A crate called a filthy crate is in General Store. The description of the filthy crate is "A filth-covered crate." Chapter - North End of Hallway (GROC_hall1) [Note that this object made use of the I6 'general' attribute in the original source code, to track the first time the player enters the seesaw. An every turn rule making use of I7's inherent state tracking is deployed for the same purpose here.] A seesaw room called North End of Hallway is south of General Store. "You're at the north end of a short north-south hall. The hallway[if current elevation of North End of Hallway is lowered] slopes sharply upwards to the south. You notice two dark doorways above you along the northern wall, one above the other, but no obvious means of getting to them[else if current elevation of North End of Hallway is balanced] travels evenly to the south. You notice a dark doorway above you along the northern wall, but no obvious means of getting to it[else if current elevation of North End of Hallway is raised] slopes sharply downwards to the south[else] is apparently not functioning correctly[end if]. To the north is an exit." The current elevation of North End of Hallway is lowered. North End of Hallway is in Puzzle Hallway. Some unimportant scenery things called some walls are in North End of Hallway. Understand "wall" as the walls. [IMPDO - add cracks and doorway objects?] Every turn when the player is in North End of Hallway and the player had not been in North End of Hallway (this is the activate seesaw puzzle rule): now Puzzle Hallway is activated; say "The hallway suddenly creaks underfoot! The floor shakes briefly and dust rises from cracks near the base of the walls. Apparently, your unexpected presence has jarred some old mechanisms back to life!" Chapter - South End of Hallway (GROC_hall2) A seesaw room called South End of Hallway is south of North End of Hallway. "You're at the south end of a short north-south hall that seems to lead nowhere. The hallway[if current elevation of South End of Hallway is lowered] slopes sharply upwards to the north[else if current elevation of South End of Hallway is balanced] travels evenly to the north[else if current elevation of South End of Hallway is raised] slopes sharply downwards to the north[else] is apparently not functioning correctly[end if]." The current elevation of South End of Hallway is raised. South End of Hallway is in Puzzle Hallway. Chapter - Stockroom (GROC_stockroom) [Note that, in the original, this object used the I6 'general' attribute to track whether the player had broken through the ceiling. In this implementation, progress in the puzzle is tracked with a single state that is part of the floorboards thing.] [Here I discovered that you can't test room relations inside of a say statement? "[if Stockroom is down from Attic]" causes compilation errors.] A room called Stockroom is in Store Interior. "This is a tiny poorly lit room, that is covered in dust. An exit south leads to a [if current elevation of North End of Hallway is balanced]short hallway[else]dark hole[end if][if floorboards are broken]. Above, a hole has been exposed in the ceiling structure[end if]." The dust is in Stockroom. [See "Ancient Tunnel" for declaration of this backdrop.] Instead of going nowhere from Stockroom when the noun is south and the current elevation of North End of Hallway is not balanced (this is the can only enter the seesaw from Stockroom when north end is balanced rule): say "You pull back before falling into what appears to be a deep pit of some sort beyond the south exit." Every turn while Puzzle Hallway is activated and the location is Stockroom and the current elevation of North End of Hallway is not balanced and the current elevation of North End of Hallway was balanced (this is the seesaw oops as seen from Stockroom rule): say "You hear a low grinding noise behind you." Section - Icebox (icebox) A locked fixed in place linewriter-abusing container called an icebox is in Stockroom. "[if the icebox is closed]A dust-covered icebox stands closed against the northern wall.[line break][else]The icebox is open. [Spiritwrak-style contents description for the icebox] [end if]". The description of the icebox is "A rather old-looking icebox." The carrying capacity of the icebox is 10. The size of the icebox is 20. Understand "ice box" as the icebox. Chapter - Attic (GROC_Attic) [Note that, in the original, this object used the I6 'general' attribute to track whether the player had broken through the floor. In this implementation, progress in the puzzle is tracked with a single state that is part of the floorboards thing.] A room called Attic is in Store Interior. "This is an exceptionally cramped attic, obviously unused for some time. The floorboards are starting to crack[if floorboards are broken] One section of the floor is particularly poor, and has a gaping hole leading downwards into darkness[end if]." [Deliberately omitted emulation of alternate names "sag", "crack", and "hole" in original source code since these are game-relevant terms and should apply to floorboards.] Instead of going nowhere from Attic when the noun is south and the current elevation of North End of Hallway is not raised (this is the can only enter the seesaw from Attic when north end is raised rule): say "You pull back at the edge of the exit. The floor, it appears, is too far below you!" Every turn while Puzzle Hallway is activated and the location is Attic and the current elevation of North End of Hallway is not raised and the current elevation of North End of Hallway was raised (this is the seesaw oops as seen from Attic rule): say "You hear a low grinding noise behind you." Section - Floorboards (attic_floorboards) Some floorboards are scenery in Attic. The floorboards can be unmolested, sagging, or broken. The description of the floorboards is "Some badly rotting floorboards[if sagging] with a noticeable sag in one section[else if broken] with a noticeable hole in one section[else][end if]." Understand "boards" or "crack" as the floorboards. Instead of taking the floorboards (this is the floorboards are structural elements rule): say "They're nailed into the floor." Instead of pushing or pulling or attacking or shaking the floorboards while the floorboards are unmolested (this is the floorboards are subject to assault rule): now the floorboards are sagging; move loose board to Stockroom; say "The floor shakes under your abuse, and suddenly, a portion in the middle sags considerably! But nothing else happens." Understand "sag" or "sagging" as the floorboards when the floorboards are sagging. Understand "hole" as the floorboards when the floorboards are broken. Section - Loose Board (loose_board) There is a thing called a loose board. "You notice a loose board, partially broken, hanging from the ceiling structure." The loose board is fixed in place. The description of the loose board is "A portion of the ceiling boards has apparently broken loose." [Note that this small hint is not present in the original.] Instead of taking the loose board (this is the loose board isn't up for grabs rule): say "The board still seems to be firmly embedded in the ceiling." Instead of pulling or shaking or attacking the loose board (this is the now let's finish the demolition work rule): now the floorboards are broken; remove the loose board from play; change the up exit of Stockroom to Attic; change the down exit of Attic to Stockroom; say "You give the board a good couple of yanks. The board soon breaks off, taking a small portion of the ceiling with it! After the dust settles, you notice the rather poor remodeling job you've done to the ceiling." Section - Square Key (icebox_key) The square key is a key in Attic. The size of the square key is 5. The square key unlocks the icebox. Section - Blue Cereal Box (cerealbox1) [Note that the original source code implemented some common features and logic across all cereal box objects; in this implementation, they have been moved to a common kind for simplicity's sake. Also note that this implementation takes some liberties with the description from the original source code. Also note that, in the original source code, this object made use of the I6 'general' attribute to track when it had been triplicated. This implementation uses the more descriptive "thrice-copied" property to the same effect.] A cereal box called a blue cereal box is in the icebox. The blue cereal box can be thrice-copied. The description of the blue cereal box is "A blue paper box with lettering that reads:[paragraph break][fixed letter spacing][10 spaces]Grueslayer Crunchies[line break](It's not just for adventurers anymore!)[paragraph break][2 spaces][bracket]Free bonus scroll surprise inside![close bracket][paragraph break][variable letter spacing]Writing on the box reads '50zm'." Understand "blue" or "plain blue" or "Grueslayer Crunchies" or "crunchies" as the blue cereal box. [Note that the following sequence is for a "puzzle" in the original game that seems manifestly unfair to this implementation's author. Given how infrequently zemdor works on targets and the fact that its obvious raison d'être is in settling the dispute in Delbin's Pub, it seems perfectly reasonable for the player to expect zemdor to be a "one-time use" spell like gloth. In my view, the player deciding to triplicate the cereal box must be the result of luck, mind-reading, or brute-force search -- none of which is the result of good game design -- especially when one takes into consideration that this particular triplication does not result in a simple copy of the original as other successful uses. The author has taken the artistic license to "adjust" this puzzle in the current version by providing the minimum fair hinting that is consistent with the original gameplay.] After casting zemdor at the blue cereal box (this is the hope you have plenty of milk rule): if the blue cereal box is not thrice-copied: let serial destination be the holder of the blue cereal box; now the navy-blue cereal box is in serial destination; now the royal-blue cereal box is in serial destination; now the blue cereal box is thrice-copied; accomplish cavity-trifecta; say "The box of cereal suddenly seems to dance with magic! As you watch, the box splits into three boxes. The magic fades, but the new boxes remain."; otherwise: say "The magic fights against the cereal box, but fails. I guess you can only triplicate once." Section - Crunchy Cereal (cereal1) Some cereal called some crunchy cereal is in the blue cereal box. Section - Sugar-Coated Scroll (sugar_scroll) A scroll called a sugar-coated scroll is in the blue cereal box. Understand "sugary" or "coated" or "sugar coated" or "sugar-covered" or "sugar scroll" as the sugar-coated scroll. The sugar-coated scroll is inscribed with zemdor. Section - Navy-Blue Cereal Box (cerealbox2) [Note that some liberties have been taken in the description of this object, as compared to the original source code.] There is a cereal box called a navy-blue cereal box. The description of the navy-blue cereal box is "A navy-blue paper box with lettering that reads:[paragraph break][fixed letter spacing][4 spaces]Frobozz Magic Super Sugar Globs[line break][2 spaces](17x the sugar of any other cereal!)[paragraph break][1 spaces][bracket]Free bonus Frobozz Magic Toy inside![close bracket][paragraph break][variable letter spacing]Writing on the box reads '50zm'." Understand "navy" or "navy-blue" or "navy blue" or "super" or "sugar" or "globs" as the navy-blue cereal box. Section - Sugary Cereal (cereal2) Some cereal called some sugary cereal is in the navy-blue cereal box. Section - Plastic Whistle (whistle) A plastic whistle is in the navy-blue cereal box. The description of the plastic whistle is "A tiny plastic whistle." The size of the plastic whistle is 1. After blowing the plastic whistle (this is the generic whistle-blowing rule): say "You make an unusually high-pitched noise." Section - Royal-Blue Cereal Box (cerealbox3) There is a cereal box called a royal-blue cereal box. The description of the royal-blue cereal box is "A royal-blue paper box with lettering that reads:[paragraph break][fixed letter spacing][17 spaces]Dornflakes[line break][2 spaces](Just like Grandma Dimwit used to make!)[paragraph break][3 spaces][bracket]Free bonus Frobozz Magic Toy inside![close bracket][paragraph break][variable letter spacing]Writing on the box reads '50zm'." Understand "royal" or "royal-blue" or "royal blue" or "Dornflakes" or "flakes" as the royal-blue cereal box. Section - Flaky Cereal (cereal3) Some cereal called some flaky cereal is in the royal-blue cereal box. Section - Plastic Wrapper (plastic_wrapper) [Note that , unlike in the original source code where the object has the I6 'openable' attribute, the definition of this container includes the I7 "unopenable" property because the wrapper is technically destroyed upon opening. (Actually, mostly so that there is no need to craft an exception to it in the "add which is prefix to closed containers in room descriptions" rule.] A closed unopenable transparent container called a plastic wrapper is in the royal-blue cereal box. The description of the plastic wrapper is "A small plastic see-through package." The size of the plastic wrapper is 5. [This is an instead rule and not an after rule because otherwise the opening action will be blocked by the 6G60 Standard Rule called "can't open unless openable" rule. Another case where it would be nice to just be able to bypass a specific rule to ensure the full range of action processing machinery gets a chance to work.] Instead of opening the plastic wrapper (this is the it's not hard to open a wrapper rule): now everything in the plastic wrapper is in the holder of the plastic wrapper; remove the plastic wrapper from play; say "The wrapper rips open with ease, then disintegrates, leaving the contents behind." [The following took some experimentation to get right, since it involved delving into the Standard Rules and then onto the DM4 (Chapter 27 "Listing and grouping objects", starting at p. 201). Once the decision was made to add a bit of flair to the way the plastic wrapper is listed in inventory, it was quickly discovered that, although it is relatively easy to suppress the unwanted suffix "(closed)" in a room description via a rule for the "printing room description details of something" activity (see WWI 17.15), this does not affect inventory listings, and no similar "printing the inventory description details of something" activity seems to exist in 6G60. While, in the context of a rule for printing the name of the plastic wrapper when taking inventory, the special "omit contents in listing" command suppresses the unwanted suffix, it also suppresses the listing of contents. Various attempts to compensate with an "after printing the name of the plastic wrapper" while taking inventory rule that listed the wrapper's contents were almost successful, but had various unpleasant side effects. Rather than pile up the kludges trying to compensate for the compensations, some experimentation with building a cousin of the "omit contents from listing" phrase resulted in what you see below. Basically, the command just turns off the built-in I6 list writer's FULL_INV bit, with a scope nicely limited to the listing of the wrapper and its contents. This command is declared in section "Room and inventory description detail for empty containers", see there for details. Note that new versions of Inform 7 include an activity "printing inventory details of something" that helps with implementation of this type of feature.] Rule for printing the name of the plastic wrapper while taking inventory or searching (this is the default description of containers are ugly rule): say "plastic wrapper (sealed), enclosing:"; omit only full inventory information in listing. Rule for printing room description details of the plastic wrapper (this is the tidy up plastic wrapper inventory listing rule): stop. Section - Toy Volcano (toy_volcano) [Note that, due to expanded opportunities to play with the toy volcano, the new properties "eruption site" and "eruption receptacle" are added; they do not appear in the original. In addition, note that the "progression" property functionally replaces a numeric property of the seawater object in the original, i.e. it tracks progression of the eruption event.] A toy volcano is in the plastic wrapper. The toy volcano has an upheaval called progression. The toy volcano has a room called eruption site. The eruption site of the toy volcano is nowhere. The toy volcano has a container called eruption receptacle. The eruption receptacle of the toy volcano is nothing. The description of the toy volcano is "A strange thing indeed -- a miniature ceramic toy, that has been painted and shaped in painstaking detail to look like a volcano." The size of the toy volcano is 5. Section - Instructional Note (volcano_note) [Note that some liberties are taken with the description of this item, as compared to the original.] An instructional note is in the plastic wrapper. It is papery. The description of the instructional note is "The instructions read:[paragraph break][fixed letter spacing][12 spaces]Frobozz Magic Instant Volcano[paragraph break][10 spaces](parental supervision recommended)[paragraph break][4 spaces]To use: 1) Add water.[line break][13 spaces]2) Immediately move to a safe distance.*[paragraph break][variable letter spacing]There appears to be some additional fine print at the bottom, but the type is too small to read." The size of the instructional note is 5. Section - Fine Print A mass-nouned thing called some fine print is part of the instructional note. The description of the fine print is "You can see that it start with an asterisk, but it's otherwise much too small to read[first time]. Probably just a bunch of disclaimers -- you know, typical corporate boilerplate[only]." Understand "type" or "small type" or "small print" or "asterisk" or "disclaimer" or "disclaimers" as the fine print. Section - Packet of Baking Powder (baking_powder) [Note that the logic of the baking-related after rule here is part of the Baking_Pan object in the original source code. Also note the use of private-naming to allow conditional application of names.] A packet of baking powder is in the icebox. It is privately-named. The description of the packet of baking powder is "A single-use packet of baking powder, which claims to be a 'Port Foozle Baker[']s Guild' product." The size of the packet of baking powder is 5. The packet of baking powder is edible. Understand "baking powder" or "powder" as the baking powder. Understand "packet" or "packet of" or "single-use" as the packet of baking powder when the packet of baking powder is not enpanned. Understand "sprinkling" or "sprinkling of" or "very" or "fine" or "white" as the packet of baking powder when the packet of baking powder is enpanned. After eating the packet of baking powder (this is the adventurers will eat the craziest things rule): say "You eat the baking powder. Yuck." After inserting the packet of baking powder into the baking pan (this is the convert baking powder to mess rule): now the printed name of the packet of baking powder is "small sprinkling of baking powder"; now the description of the packet of baking powder is "A small pile of very fine white powder."; say "You open the packet and add the powder to the pan." Section - Stick of Butter (butter) [Note that, in the original source code, there was a 70% chance that eating the stick of butter would generate an optional message of "Your heart will no doubt thank you for that someday.", but there was a 100% chance of the player dying from the action. Since the immediacy of the death makes the optional message nonsensical and the player death seems deliberate, the optional message is omitted in this implementation. Also note that the logic of the baking-related after rule here is is not in the original version but is added for consistency in the treatment of cake ingredients. Also note the use of private-naming to allow conditional application of names.] A stick of butter is in the icebox. It is privately-named. The description of the stick of butter is "A good-sized stick of butter." The size of the stick of butter is 5. The stick of butter is edible. Understand "fat" or "butter" as the stick of butter. Understand "stick" or "stick of" as the stick of butter when the stick of butter is not enpanned. Understand "blob" or "blob of" as the stick of butter when the stick of butter is enpanned. After eating the stick of butter (this is the adventurers will eat the grossest things rule): say "You eat the entire stick of butter. The sudden intake of concentrated fat is too much of a shock to your system, and an important artery somewhere bursts."; end the game in death. After inserting the stick of butter into the baking pan (this is the convert butter to mess rule): now the printed name of the stick of butter is "blob of butter"; now the description of the stick of butter is "A blob of delicious butter."; say "You peel off the wrapper and let the blob of butter fall into the pan." Chapter - Ski Resort (FROSTHAM_Resort) [Note that the original specified room synonyms of "skis", "ski", "earmuffs" and "earmuff" to imply their unimportant nature, but this implementation adds them as actual things the ski instructor is holding.] A room called Ski Resort is west of Frostham. "You are inside a large ski resort. Perhaps it's not ski-season, as the entire place is basically empty. Frostham city lies to the east." Outside from Ski Resort is Frostham. An unimportant scenery thing called a resort is in Ski Resort. The view of the city is in Ski Resort. [See "New Borphee Outskirts" for declaration of this backdrop.] Instead of going west in Ski Resort (this is the sorry no skiing rule): say "You don't have a lift-ticket. Also, you don't have skis. Most importantly, however, the slopes look pretty lousy." Chapter - Ski Instructor (ski_instructor) [Note that this object used the I6 'transparent' property in the original source code to ensure that the player can see the things it 'held'. Correspondingly, he is given the "open-inventoried" property here (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part). Also note that this object made use of the I6 'general' attribute to track whether the instructor had traded the rag for the skis. This implementation uses the more descriptive property 'be the beneficiary of trade' to the same effect. Finally, note that, because the original source code's ski instructor object has an "Order:" section in its I6 'Life()' routine, the generic life behavior rules for him here are somewhat different than the typical arrangement.] The ski instructor is an open-inventoried man in Ski Resort. "A tall lanky guy is here, holding two colorful skis. He seems to be [if the ski instructor is carrying the waxy scroll]waxing them with a scroll[else]concentrating greatly on waxing his skis[end if]." The ski instructor can be the beneficiary of trade. The description of the ski instructor is "A tall lanky guy, like I said. He's decked out in fancy bright winter clothes." Understand "dude" or "skier" or "tall" or "lanky" or "guy" as the ski instructor. The ski instructor carries some skis. Understand "ski" or "colorful" or "Grayslopes" or "Slaloms" as the skis. The description of the skis is "They look shiny enough to you." The ski instructor wears some earmuffs. Understand "fluffy" or "earmuff" or "muffs" as the earmuffs. The ski instructor wears some unimportant things called some fancy winter clothes. Understand "bright" as the fancy winter clothes. Instead of attacking the ski instructor (this is the resorts are no place for violence rule): admonish the player dudily; Instead of throwing something at the ski instructor (this is the resorts are no place for ballistics rule): silently try dropping the noun; if the player does not bear the noun: say "The ski instructor dodges nimbly. "; admonish the player dudily. Instead of throwing the prayer book at the ski instructor (this is the it was either a special instead rule for the prayer book or riskily bypassing dropping action checks for everything else rule): silently try dropping the noun; if the player does not bear the noun: say "[line break]'Dude!' whines the ski instructor. 'What kind of a priest are you?'"; rule succeeds. [force success of action] To admonish the player dudily: say "'Dude, you must chill.'" Instead of answering the ski instructor that something (this is the ski instructor does not engage with unsolicited answers rule): dismiss the subject dudily. The ski instructor does not engage with unsolicited answers rule is listed after the redirect saying to syntax greeting to greeting action rule in the instead rules. Instead of telling the ski instructor about something (this is the ski instructor is not into responding intelligibly rule): dismiss the subject dudily. To dismiss the subject dudily: say "'Uh, whatever, dude.'" Instead of showing something to the ski instructor (this is the ski instructor response to being shown things rule): if the noun is the rag: create an expectant pause with the ski instructor asking the skier's request about trading; say "'Hey dude, can I borrow that?'"; otherwise: dismiss the subject dudily. The skier's request about trading is a binary reply. The positive rejoinder of the skier's request about trading is "[trigger exchange][run paragraph on]". The negative rejoinder of the skier's request about trading is "The lanky guy looks wistfully at the rag, then goes back to polishing his skis." To say trigger exchange: say "You accede to his request."; abide by the successful ski-trade rule. Instead of asking the ski instructor to try giving the skis to the player (this is the ski instructor won't part with skis rule): say "'No way, dude.'" To declaim willingness to surrender items dudily: say "'I'm using it, dude.'" Instead of asking the ski instructor to try giving the waxy scroll to the player while the ski instructor is not the beneficiary of trade (this is the at least it has wax dude rule): declaim willingness to surrender items dudily. Instead of asking the ski instructor to try giving the rag to the player while the ski instructor is the beneficiary of trade (this is the no dude we traded it's mine now rule): declaim willingness to surrender items dudily. [Note this next response is not in the original.] Instead of asking the ski instructor to try giving the earmuffs to the player (this is the ears need warmth to dude rule): say "'Sorry, bro. Need [']em out here.'" Instead of asking the ski instructor about "rag" (this is the ski dude knows his polishing implements rule): say "'A rag makes an excellent ski-maintenance accessory, dude.'" Instead of querying the ski instructor about the waxy scroll (this is the brief and unsatisfying backstory of the waxy scroll's struggle to find meaning in a world gone mad rule): say "'Something I found at the top of a run. [if the ski instructor bears the waxy scroll]Doesn't[else]Didn't[end if] work too well[if the ski instructor bears the waxy scroll], but hey, I gotta wax[end if].'" Instead of querying the ski instructor about the skis (this is the they're really just for posing dude rule): say "'My rad Grayslopes Slaloms. If you don't wax [']em every 30 seconds, they lose their speed.'" Instead of querying the ski instructor about the earmuffs (this is the so chic rule): say "'They fully work, dude. Excellent for chilling when it's chilling.' He laughs moronically." Instead of querying the ski instructor about the resort (this is the treat querying the dude about the resort as asking him about skiing rule): try asking the ski instructor about "skiing" instead. The ski instructor recognizes the snow. Instead of querying the ski instructor about the snow (this is the treat querying the dude about snow as asking him about skiing rule): try asking the ski instructor about "skiing" instead. [Note the addition of extra keywords and the use of bold type vary slightly from the original.] Instead of asking the ski instructor about "slopes/slope/runs/run/powder/skiing" (this is the ski instructor isn't so hot on this place rule): say "The skier takes you aside. 'Listen dude, between you and me, the slopes here rot. They used to be way better. But you know, I hear there are some [bold type]killer[roman type] drops up north.'" To let the dude abide: say "'Dude, I have no idea what you're talking about.'" Persuasion rule for asking the ski instructor to try doing something: let the dude abide; rule fails. Instead of asking the ski instructor about something (this is the generic ski instructor response rule): let the dude abide. [This unusual separation of the trade into its own rule is to allow the successful ski-trade rule to be called separately if the PC agrees to give the rag when asked.] This is the successful ski-trade rule: now the waxy scroll is in the location; now the ski instructor carries the rag; now the ski instructor is the beneficiary of trade; accomplish waxing-moronic; say "The skier gladly takes the rag and starts polishing immediately. He lets the scroll fall to the ground. 'Excellent, man. Thanks!'[run paragraph on]". [last token compensates for extra line break inserted when saying "[trigger exchange]"] Instead of giving the rag to the ski instructor (this is the ski instructor will gladly trade rag for scroll rule): follow the successful ski-trade rule; say "[line break]". [this line compensates for suppressed line break in previous rule when just giving the rag to the ski instructor] Instead of giving something to the ski instructor (this is the generic ski instructor refusal to accept things rule): say "'No thanks, dude.'" Instead of doing something when the current action is generic life behavior and the current action involves the ski instructor (this is the ski instructor generic life rule): say "At the moment, the skier is too busy waxing." To indicate that earmuffs are proof against sermons: say "[if the ski instructor wears the earmuffs]A pair of fluffy earmuffs the skier is wearing prevents him from hearing[else]General empty-headedness prevents him from absorbing[end if] the full impact of your sermon[first time]. The chant is wasted[only]." After greeting the ski instructor (this is the howdy dudily rule): say "The skier gives you the [']thumbs-up['] sign. 'Hey, dude.'" After casting foblub at the ski instructor (this is the earmuffs prevent interest rule): indicate that earmuffs are proof against sermons. After casting espnis at the ski instructor (this is the earmuffs prevent disinterest rule): indicate that earmuffs are proof against sermons. [Note the following ski-oriented interactions are not part of the original.] After casting egdelp at the skis when the ski instructor is at hand (this is the this should keep him busy rule): say "The ski instructor regards you with deeply-felt gratitude. 'Thank you, dude,' he chokes out, before returning to his polishing with renewed vigor." Every turn when the ski instructor is at hand and the ski instructor does not carry the skis (this is the without my skis I am nothing rule): remove the ski instructor from play; say "'No, way, dude! My skis just disappeared! What kind of past life karma causes that?' The skier[if the ski instructor carries the waxy scroll], clutching [the waxy scroll] despondently,[else], moaning about needing to get his aura cleansed,[end if] leaves to the west." Every turn when the ski instructor is at hand and the ski instructor does not carry the waxy scroll and the ski instructor is not the beneficiary of trade (this is the I guess polishing them wasn't that important after all rule): remove the ski instructor from play; accomplish waxing-moronic; say "'Dude, like, that scroll thing just vanished! What a cosmic experience!' On that note, the skier opts to head for the slopes, and leaves to the west." The I guess polishing them wasn't that important after all rule is listed after the without my skis I am nothing rule in the every turn rules. Every turn when the ski instructor is at hand and Expectant Pause is not happening (this is the ski instructor bit of business rule): if a random chance of 1 in 5 succeeds: say "The skier polishes a spot on his skis." Section - Waxy Scroll (waxy_scroll) The ski instructor carries a scroll called a waxy scroll. The waxy scroll is inscribed with egdelp. Chapter - Waiting Room (FROSTHAM_Governer1) [Note a slight modification from the original description here, per the note attached in the "Waiting Room Desk" section. Also note that the logic ensuring a single visit to the governor's office (attached to this object in the original code) has been implemented here as an after rule in the "Governor's Office" section.] A room called Waiting Room is southwest of Frostham. "You are in a waiting room in the house of the Frostham Governor. The carpet is surprisingly plush. The walls have been painted a rather bland peach-like color. The furnishings[if waiting room desk is unladen and the receptionist is not at hand] (even the desk!)[end if] are also colored peach, which complements the walls without being too nouveau. The way out is to the northeast." The printed name of Waiting Room is "Governor's House, Waiting Room". Outside from Waiting Room is Frostham. Some bland carpet is unimportant mass-nouned scenery in Waiting Room. Some complementary furnishings are unimportant scenery in Waiting Room. Section - Peach Couch (Gov_couch) [Note that, in the original code, this object made use of the I6 'general' attribute to track whether it has already been searched. In this implementation, I7's inherent state memory is used for the relevant logic.] A fixed in place enterable supporter called a peach couch is in Waiting Room. "A comfortable-looking peach-colored couch is here." The description of the peach couch is "It looks pretty comfy, but the color wouldn't have been your first choice." Understand "peach-colored" or "cushions" as the peach couch. After searching the peach couch when we have not searched the peach couch (this is the coins in couches are cliche but reliable rule): move a random uncirculated coin to Waiting Room; say "You rummage through the cushions and a coin falls out!" Section - Travel Brochure (travel_posters) A travel brochure is in Waiting Room. It is papery. The description of the travel brochure is "The brochure has pictures of various cheerful-looking people in rather cheerful-looking places. Bold lettering reads 'FEEL BETTER IN MIZNIA', 'IT'S ARAGAIN, AGAIN', and 'NEW BORPHEE, EVERYONE'S FAVORITE CITY'." The size of the travel brochure is 10. Understand "brochures" as the plural of the travel brochure. Section - Subway Brochure (GUS_Brochure) [Note that this object can be found in the file SUBWAY.INF in the original source code. It is relocated here for convenience of reference.] A subway brochure is in Waiting Room. It is papery. The description of the subway brochure is "'The Great Underground Subway'[paragraph break]Adventurers who really need to get where they're going in a hurry are going to love GUS! The new underground, high-speed rail system can be your personal ride to the major travel points in Quendor, for the cost of just one zorkmid![paragraph break]For Eastland travel to Frostham, Aragain and Fublio Valley, the Purple Line is at your service! For Westland travel to New Borphee, Gurth City and Miznia, just jump on board the Green Line! And for you folks who need to get across the Great Sea in a jiffy, don't forget the Orange Line, stopping off at Aragain, Anthar and Gurth City![paragraph break]Best of all, transfers between lines are covered by your original fare,. Don't delay, take the GUS today!" The size of the subway brochure is 10. Understand "brochures" as the plural of the subway brochure. Section - Waiting Room Desk (Gov_desk1) [Note that, in the original source code, this object is declared as scenery. My best guess as to the reason is that it prevents inclusion in the automatic listing of room contents, making for cleaner prose when the objects on it *are* automatically included. However, this makes it effectively invisible once all objects are taken from it and the receptionist departs, which is likely to occur. See modifications to "Waiting Room" description to prevent this effect.] A waiting room desk is a scenery supporter in Waiting Room. The description of the waiting room desk is "A fairly plain-looking desk." Section - Ledger (Gov_ledger) A ledger is on the waiting room desk. The description of the ledger is "[if the receptionist is at hand]The receptionist seems to be using it at the moment[else]The ledger reads:[paragraph break]' -- New signed petition for presentation and coronation of new King delivered to Aragain Magistrate, awaiting word of event schedule.'[paragraph break]That's all. I guess the governor hasn't been very busy as of late[end if]." The size of the ledger is 15. Instead of taking the ledger while the receptionist is at hand (this is the receptionists can be intimidating rule): say "The receptionist gives you a rather menacing look, and you desist in trying to take it from her." Section - Alarm Clock (alarm_clock) [Note that, in the original source code, this object made use of the I6 'add_to_scope' property to add several other objects that are functionally part of the alarm clock. Due to the changes in default rules for concealment between I6 and I7 that make parts of compound things visible and touchable, this implementation instead simply defines the sub-objects as part of the alarm clock. For the same reasons, the specification of an equivalent to the original's I6 'transparent' property is omitted. Note also that the functions originally defined via I6 daemon-related properties (e.g. 'time_out') are both handled differently and restructured for readability. The way the clock works does not make a lot of sense to me, but this is a faithful rendition of the logic in the original source code, and it definitely works according to these rules in release 3/960606.] [IMPDO - improve clock function? maybe approximate setting and reading to nearest quarter hour?] A thing called an alarm clock is on the waiting room desk. The alarm clock has a number called current setting. The current setting of the alarm clock is 9. The description of the alarm clock is "A small round desk-clock, with a set of bells on the top, and a small pull-knob on the back. Strangely, the clock seems to be stopped. Two hands, black and golden, are sitting at [current setting of the alarm clock] and [current setting of the knob], respectively." The size of the alarm clock is 5. To advance the black hand: increment the current setting of the alarm clock; if the current setting of the alarm clock is greater than 12, now the current setting of the alarm clock is 1. To decide whether alarm clock hands are aligned: if the current setting of the alarm clock is the current setting of the knob, yes; no. [Note that, in the original source code, the alarm_clock object's I6 'time_out()' routine incorporated all of the logic to send the secretary running for lunch or to summon the tailor. This is pretty much how it would have to be structured if a typical I7 "at the time when..." construct were used. Much more preferable is to create some sort of signal for other rule processing. This implementation uses the novel if dubious (from a system-legality perspective) approach of instigating a singing action with the alarm clock as the actor. Thus, some logic is moved to the sections for those two people, and the structure of the rest is modified somewhat.] At the time when the alarm clock winds down: advance the black hand; if the alarm clock is at hand: [replaces TestScope() from original code] say "The alarm clock makes an awful grinding noise"; if alarm clock hands are aligned: say ", followed by a ear-splitting clang!"; otherwise: say "!"; if the alarm clock hands are aligned: try the alarm clock singing. After attacking the alarm clock (this is the it's frustration o'clock rule): say "You clonk the clock. Nothing useful results." Section - Knob (alarm_clock_dial) [Note that this implementation makes this thing part of the alarm clock per the note in that section, and that the I6 'static' property assigned to this object is omitted here, since I7 standard rules will prevent removal from the parent alarm clock object. Also note that the original specifies "pull" as a name for this object, but this implementation uses "pull-knob" as the alternate name, both to conform with the alarm clock description and avoid conflict with the verb/command "pull". In addition, the original code used the I6 'general' attribute to track whether it the knob was pushed in or pulled out. This implementation uses a more descriptive binary condition of 'pushed in' / 'pulled out'.] A numeric-dial called a knob is part of the alarm clock. The knob can be pushed in or pulled out. The knob is pushed in. The minimum setting of the knob is 1. The maximum setting of the knob is 12. The current setting of the knob is 12. The description of the knob is "A small, pullable knob on the back of the clock." Understand "pull-knob" as the knob. Check setting the knob to something while the knob is pushed in (this is the knob only turns so far when pushed in rule): try turning the knob instead. [The following rule overrides normal behavior for the numeric-dial kind in the case of the pull-knob while it is pushed in; turning it in that state does not cause its setting to change. I7's rule ordering based on specificity ensures that this is checked before the general rule, while forcing a rule success ends processing of the "carry out turning" rulebook.] Carry out turning the knob when the knob is pushed in (this is the pull-knob is not a typical numeric dial rule): do nothing; rule succeeds. After pushing the knob while the knob is pulled out (this is the knob can be pushed in when pulled out rule): now the knob is pushed in; say "The knob pushes in a short bit." After pushing the knob while the knob is pushed in (this is the knob can be pushed no further rule): say "The knob is as far in as it can go." After pulling the knob while the knob is pushed in (this is the knob can be pulled when pushed in rule): now the knob is pulled out; say "The knob pulls out a short bit." After pulling the knob while the knob is pulled out (this is the knob can be pulled no further rule): say "The knob is as far out as it can go." After turning the knob while the knob is pushed in (this is the knob barely turns when pushed in rule): the alarm clock winds down in 1 turn from now; say "The knob turns -- barely. You hear a small clicking noise as well." After turning the knob while the knob is pulled out (this is the knob easily turns when pulled out rule): say "The knob turns easily. [one of]You notice the golden hand on the front sweep [or]The golden hand advances [stopping]to [current setting of the knob]." After setting the knob to something (this is the here's a small improvement rule): say "The knob turns easily. The golden hand [first time]on the front [only]now points to [current setting of the knob]." Section - Hands (alarm_clock_hands) [Note that this implementation makes this thing part of the alarm clock per the note in that section, and that the I6 'static' property assigned to this object is omitted here, since I7 standard rules will prevent removal from the parent alarm clock object.] Some hands are part of the alarm clock. The description of the hands is "The black hand is on the [current setting of the alarm clock], and the golden hand is on the [current setting of the knob]." Understand "black" or "golden" or "gold hand" or "hand" as the hands. Instead of turning the hands (this is the can't set hands directly rule): say "Hmm. The hands won't move when you push on them." Instead of setting the hands to something (this is the can't set hands to something directly rule): try turning the hands instead. Section - Bells (alarm_clock_bells) [Note that this implementation makes this thing part of the alarm clock per the note in that section, and that the I6 'static' property assigned to this object is omitted here, since I7 standard rules will prevent removal from the parent alarm clock object.] Some bells are part of the alarm clock. Understand "bell" as the bells. Section - Office Door (Gov_door) A closed lockable door called an office door is south of Waiting Room. "There's a[if office door is open]n open[else] closed[end if] door to the [direction of office door from the location]." The description of the office door is "It's just a thick door." Understand "thick" as the office door. Instead of opening the office door while the receptionist is at hand (this is the art imitates life rule): say "The receptionist puts a hand in your way and says, 'The governor is currently busy.'" [Note that this implementation uses bold type instead of the implicit underlining found in the original source code for the word "out".] Instead of closing the office door while the governor is at hand (this is the governor hints you should go rule): say "'Close it on your way [bold type]out[roman type]', the governor snarls." Chapter - Receptionist (receptionist) [Note that, in the original source code, this object made use of the I6 'general' attribute to track the first time the player encountered the receptionist. This implementation relies on I7's inherent state memory for the same effect. Also note that, although this object has a combined Answer and Order section in its I6 'Life()' routine, the catchall message is the same as that found in the 'default' section unless the 'special_word' is 'hello'. As a result, this implementation gives the woman a typical set of generic life behavior rules.] The receptionist is a woman in Waiting Room. "A receptionist sits behind a desk, engrossed in the ledger." The description of the receptionist is "A gruff-looking lady who is apparently far more interested in her work than in you." Understand "gruff-looking" or "gruff" or "lady" or "secretary" as the receptionist. To indicate unavailability of appointments: say "The receptionist, without looking up, says 'He's very busy right now.'" Instead of asking the receptionist about "appointment" (this is the receptionist doesn't like booking appointments rule): indicate unavailability of appointments. The receptionist recognizes the ledger and the governor. Instead of querying the receptionist about the ledger (this is the treat inquiring about ledger as asking about an appointment rule): indicate unavailability of appointments. Instead of querying the receptionist about the governor (this is the treat inquiring about governor as asking about an appointment rule): indicate unavailability of appointments. [Note the following response is not in the original.] Instead of querying the receptionist about the clock (this is the I guess she's not having fun rule): say "The receptionist looks wistfully at the clock and sighs. 'I think it's broken,' she says." Instead of asking the receptionist about something (this is the generic receptionist response rule): say "The receptionist shrugs." Instead of sneezing when the receptionist is at hand (this is the politeness would be out of character rule): say "'If you want to spread germs, do it outside.'" Instead of yelling when the receptionist is at hand (this is the you probably could have guessed this reaction rule): say "'If you're gonna wait, do it quietly.'" Instead of singing when the receptionist is at hand (this is the just to switch the routine up a bit rule): say "'We're not holding auditions, you know.'" To decline secretarial assault: say "You can't bring yourself to do so. Though perhaps her attitude is annoying, she has done you no wrong." Instead of attacking the receptionist (this is the everyone confuses this game with Grand Theft Auto rule): decline secretarial assault. Instead of throwing something at the receptionist (this is the everyone confuses this game with Duck Hunt rule): decline secretarial assault. This is the receptionist default life behavior rule: say "The receptionist seems to be studiously ignoring you." Instead of doing something when the current action is generic life behavior and the current action involves the receptionist (this is the receptionist generic life rule): abide by the receptionist default life behavior rule. Persuasion rule for asking the receptionist to try doing something (this is the reroute understood orders to receptionist to generic life response rule): consider the receptionist default life behavior rule; rule fails. To indicate the secretary's interruption of magic: say "The receptionist, in a rather shrill voice says, 'If you're gonna wait, do it quietly,' disrupting your chant." Check casting a spell when the receptionist is at hand (this is the magic shows disallowed in this office rule): indicate the secretary's interruption of magic; rule fails. The magic shows disallowed in this office rule is listed after the trying to cast a temporarily-learned spell always uses it up rule in the check casting rules. Check casting a spell at something when the receptionist is at hand (this is the magic demonstrations disallowed in this office rule): indicate the secretary's interruption of magic; rule fails. The magic demonstrations disallowed in this office rule is listed after the trying to cast a temporarily-learned spell at something always uses it up rule in the check casting it at rules. After greeting the receptionist (this is the receptionist does not want to be your friend rule): say "The receptionist, without looking up, asks 'Can I help you?'" After blowing the plastic whistle when the receptionist is at hand (this is the see how many rules you have to write when you give the player an open-ended toy rule): say "You make an unusually high-pitched noise. The receptionist, in a rather shrill voice says, 'If you're gonna wait, do it quietly.'" After the alarm clock singing when the receptionist can touch the alarm clock (this is the receptionist is just waiting for the clock to ring rule): remove the receptionist from play; accomplish clock-wiseguy; if the location of the player is: -- Waiting Room: say "The receptionist suddenly jumps from her seat and rushes out of the room, screaming 'Lunchtime!'"; -- Frostham: say "You see a woman rush out of the building to the southwest, and quickly vanish down a side street." Every turn when the receptionist is at hand and the receptionist had not been at hand (this is the cue the impassable secretary cliche rule): say "Without even looking up, the receptionist says, 'The governor is busy right now.'" Every turn when the receptionist is at hand and the ledger is on the waiting room desk (this is the secretarial scene business rule): if a random chance of 1 in 10 succeeds: say "The receptionist idly turns a page in the ledger." Chapter - Governor's Office (FROSTHAM_Governer2) A room called Governor's Office is south of office door. "You are in a rather spacious office. The carpeting is quite plush, and all the furnishings seem excessively lavish." Some lavish furnishings are unimportant scenery in Governor's Office. Some plush carpeting is an unimportant mass-nouned backdrop in Governor's Office. Understand "carpet" as the plush carpeting. After going north from the Governor's Office when the governor is in Governor's Office (this is the governor doesn't like repeat visitors rule): now the office door is closed; now the office door is locked; say "You hear the door slam and lock behind you." Section - Office Desk (Gov_desk2) A scenery supporter called an office desk is in Governor's Office. The description of the office desk is "A fairly impressive-looking desk, made from a massive, lacquered piece of black oak wood." Instead of pushing or pulling or rubbing or attacking or searching the office desk (this is the don't mess with the governor's desk rule): say "'Do you mind?' the governor says, plainly irritated." After casting egdelp at the office desk (this is the governor doesn't like waxy buildup rule): say "The desk is covered with a ugly waxy film. The governor looks extremely annoyed and wipes the desk clean with a stack of papers." Section - Shiny Key (cab_key) [Note that this object is defined in ARAGAIN.INF in the original source code, but is specified as being on the governor's desk, so it has been moved to this section.] A key called a shiny key is on the office desk. The description of the shiny key is "A shiny key." The size of the shiny key is 5. Chapter - Governor (governor) [Note that this object used the I6 'transparent' property in the original source code to ensure that the player can see the things it 'held'. Accordingly, he is given the "open-inventoried" property here (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part). Also note that this object made use of the I6 'general' attribute to track the first time that the player encounters him. In this implementation, I7's inherent state memory is used for the equivalent logic. In addition, this implementation gives the governor two new properties (noticing the PC, already talking to PC) to make his behavior seem slightly less robotic. Finally, note that the I6 'Life()' routine associated with this object did not have a default response as most other NPCs do, though it did have a section applicable to the I6 Answer and Order actions. Consequently, this person does not have a "generic life behavior" rule or associated persuasion rule.] The governor is an open-inventoried man in Governor's Office. "The governor of Frostham is sitting behind a desk here, trying to look busy." The governor can be noticing the PC. The governor can be already talking to PC. The description of the governor is "A sour-looking man who tries his best not to notice you." Understand "sour-looking" or "sour" or "gov" or "of Frostham" as the governor. The governor recognizes the receptionist, the shiny key, the magistrate, the young child and the ledger. Instead of querying the governor about the shiny key (this is the governor conveniently disowns the key rule): now the governor is already talking to PC; say "'Some key an important visitor forgot while visiting. Probably useless now[if the player bears the key]. You can keep it, for all I care[end if].'" Instead of querying the governor about the receptionist (this is the governor doesn't pay close attention to subordinates' activities rule): now the governor is already talking to PC; say "'I think she's out to lunch, he says, with obvious annoyance." To feign ignorance about royal politics: now the governor is already talking to PC; say "He looks at you suspiciously. 'Never heard of him,' he says." Instead of querying the governor about the magistrate (this is the something is rotten in Aragain oh my rule): feign ignorance about royal politics. Instead of querying the governor about the young child (this is the never heard of him either rule): feign ignorance about royal politics. Instead of querying the governor about the ledger (this is the such details don't concern me rule): now the governor is already talking to PC; say "'I think my receptionist has it.'" Instead of querying the governor about the pencil (this is the discussing pencils would take far too long rule): now the governor is already talking to PC; say "'Please! I'm a very busy man!'" Instead of asking the governor about something (this is the generic governor response rule): now the governor is noticing the PC; say "'Sorry, that's not my problem. Now run along.'" Instead of kissing the governor (this is the why is this even a standard verb rule): now the governor is noticing the PC; say "The governor brushes you off. 'Are you planning on running for office or something?'" Instead of attacking the governor (this is the don't attack the governor no seriously don't rule): trigger the governor's anti-visitor defense system. Instead of throwing something at the governor (this is the well you can't say I didn't warn you rule): trigger the governor's anti-visitor defense system. To trigger the governor's anti-visitor defense system: say "As you make a threatening move, the governor presses some unseen switch behind his desk. Before you know it, a hidden trapdoor opens in the floor and you plunge to your death.[paragraph break]A good politician is always prepared, it seems..."; end the game in death. Instead of telling the governor about something (this is the governor doesn't want to hear it rule): now the governor is noticing the PC; say "'Sure, sure. Scram, will you?'" [Note the governor's non-standard (and person-specific) rules for answering it that and asking him to try doing something get require specific positioning declaration to work nicely with the general (and not person-specific) rules for greeting attempts. See WWI 18.18 "The Laws for Sorting Rulebooks" and WWI 18.4 "Listing Rules Explicitly."] To explain the governor's MO: say "The governor is busy trying to look busy." Instead of answering the governor that something (this is the when did he ask a question rule): explain the governor's MO. The when did he ask a question rule is listed after the redirect saying to syntax greeting to greeting action rule in the instead rules. Instead of asking the governor to try doing something (this is the ask not what your country can do for you rule): explain the governor's MO. The ask not what your country can do for you rule is listed after the redirect command syntax greeting to greeting action rule in the instead rules. Instead of giving something to the governor (this is the I guess it doesn't meet the acceptance threshold rule): now the governor is noticing the PC; say "Bribing a politician, eh?" Instead of showing the ledger to the governor (this is the all bark no bite rule): now the governor is noticing the PC; say "'Hey, return that to the receptionist!'" Instead of showing something to the governor (this is the governor is too busy for show and tell rule): now the governor is already talking to PC; say "'Please! I'm a very busy man!'" After greeting the governor (this is the let's get straight to business rule): now the governor is noticing the PC; say "'Yeah, sure. So what's your problem?'" After taking the shiny key while the shiny key was unhandled and the governor is at hand (this is the inexplicable flippancy about petty theft rule): now the governor is noticing the PC; say "The governor arches his eyebrow as you nab the key. 'Oh sure, just go ahead and take things from my office. See if I care.'" After casting foblub at the governor (this is the governor is foblub-proof rule): say "Actually, the governor seems pretty glued to his seat already. In any event, nothing seems to happen." After casting espnis at the governor (this is the governor sleeps lightly rule): say "The governor seems to nod off, but only for a second." Every turn when the governor is at hand and the governor had not been at hand (this is the governor thinks you can be bought cheaply rule): now the governor is noticing the PC; move a random uncirculated coin to the player; say "The governor scowls as you enter. 'What do you want?' he says, and doesn't wait for a response. 'Oh, I know. More complaints about the snow, I suppose? Well look, I didn't ask for this job. Do you want it? I didn't think so.'[paragraph break]He shoves something into your hand. 'Here, buy yourself a cup of coffee, and stop bothering me.'" [Note change from original logic -- governor's response is surpressed or modified on same turn he has certain interactions with PC.] Every turn when the governor is at hand and the governor is not noticing the PC (this is the governor scene business rule): let i be a random number between 1 and 4; say "The governor "; if i is: -- 1: say "thumbs through some papers."; -- 2: say "balances a pencil on his nose."; -- 3: say "scribbles something meaningless."; -- 4: say "[if the governor is already talking to PC]glares at you pointedly[otherwise]looks up and notices you briefly[end if]. 'Don't you have anything else to do?' he demands." Every turn when the governor is at hand (this is the governor is easily distracted rule): now the governor is not already talking to PC; now the governor is not noticing the PC. The governor is easily distracted rule is listed after the governor scene business rule in the every turn rules. Section - Pencil (pencil) The governor carries a pencil. The description of the pencil is "It looks chewed-on." Understand "chewed" or "chewed-on" as the pencil. Chapter - Subway Entrance (FROSTHAM_GUSStop) A room called Subway Entrance is south of Frostham. "You're near the southern end of the city. The rest of the city lies to the north. There's also a rather conspicuous stairway down here." Subway Entrance is in Walkable Frostham. The GUS Stop stairway is in Subway Entrance. [See "Entrance to Greater Anthar" for declaration of this backdrop.] The circular sign is in Subway Entrance. [See "Entrance to Greater Anthar" for declaration of this backdrop.] Part - Fublio [FUBLIO.INF] Section - Coastline [This object does not exist in the original, but it is here used to simplify the logic of multiple changes to room descriptions after the eruption of the toy volcano in Fublio Bay.] There is a thing called the coastline. It is fixed in place. The coastline can be altered. Section - Navigable Waters Navigable Waters is a region. The Great Sea is in Navigable Waters. [See "Swank Waterfront" for declaration of this backdrop.] [Note that this message was originally implemented via location-specific I6 'Before' rules, but this implementation attaches the behavior to the presence of an I7 backdrop to simplify things.] Instead of filling a container when the player can see the Great Sea (this is the no need to carry seawater rule): say "Seawater is hardly a rare commodity these days." To discourage extracurricular swimming lessons: say "The water's pretty deep here. I'd stay in the boat." Instead of exiting while the player is in the sailboat and the location is in Navigable Waters (this is the can't leave the boat for the water rule): discourage extracurricular swimming lessons. Instead of entering the seawater while the player is in the sailboat and the location is in Navigable Waters (this is the no diving allowed rule): discourage extracurricular swimming lessons. Instead of swimming in the seawater while the player is in the sailboat and the location is in Navigable Waters (this is the don't you know it's full of groupers rule): discourage extracurricular swimming lessons. Instead of going to a room in Navigable Waters when the player is not in the sailboat (this is the can't navigate waters sans boat rule): say "The water looks pretty choppy. I'd suggest you use a sea-going vessel of some sort." Instead of swimming in the location while the location is in Navigable Waters (this is the why have this verb when you can never swim rule): discourage extracurricular swimming lessons. Section - Fresh Vulcanism Fresh Vulcanism is a region. Instead of swimming in Fresh Vulcanism (this is the it's not a hot springs spa yet rule): say "Near a still-active volcano? Not wise." Chapter - Southern Fublio Valley (FUBLIO_GUSStop) Southern Fublio Valley is a room. "You are in a southern region of Fublio Valley, where someone apparently decided to start a city. So far, a couple huts and farmhouses are the result.[paragraph break]A rather run-down farmhouse lies in the distance to the southwest, a trail runs through grasslands to the south, and a smaller trail runs along the hills to the southeast. To the north, you see a decrepit old building. There is also a stairway leading into the ground here." Some huts, some farmhouses, some grasslands, and some hills are unimportant scenery in Southern Fublio Valley. The trail is in Southern Fublio Valley. [See "Flower Garden" for declaration of this backdrop.] The GUS Stop stairway is in Southern Fublio Valley. [See "Entrance to Greater Anthar" for declaration of this backdrop.] The circular sign is in Southern Fublio Valley. [See "Entrance to Greater Anthar" for declaration of this backdrop.] The grass is in Southern Fublio Valley. [See "South Quad" for declaration of this backdrop.] Instead of going nowhere from Southern Fublio Valley when the noun is a cardinal direction (this is the it's always a good time for a brief pastoral interlude rule): say "You amble around the local area a bit, and return here." Section - Decrepit Old Building A proxy entrance called a decrepit old building is in Southern Fublio Valley. The relevant direction of the decrepit old building is north. Chapter - Abandoned Bank (Fublio_bank) A room called Abandoned Bank is north of Southern Fublio Valley. "You're inside what must have once been a small branch office of the once indestructible Bank of Zork. However, the place has clearly been abandoned, and age has not been kind. Even the required portrait of J. Pierpont Flathead has been pilfered. An exit lies south." The dust is in Abandoned Bank. [See "Ancient Tunnel" for declaration of this backdrop.] To decide whether (X - a number) is (Y - a number) more than (Z - a number): if Z plus Y is X, yes; no. [Note that the original logic for this included some parentheses around different layers of conditions, but since all comparisons are logic ands or and-nots, this implementation does not try to recreate them. The result should evaluate the same unless my comprehension of basic logic is particularly poor today.] To decide whether bank rules are being followed: if there are exactly 20 coins in the basis vault, yes; if [1] the loans vault contains at least 1 coin and [2] the number of coins in the interest vault is the number of coins in the loans vault and [3] the number of coins in the overhead vault is 5 more than the number of coins in the interest vault and [4] the basis vault does not contain 20 coins, yes; no. [It would be great if you could say "when bank rules are not being followed" or "unless bank rules are being followed", but no dice in 6G60, so the phrasing here is a little awkward.] Instead of going to somewhere from the Abandoned Bank when not bank rules are being followed (this is the it's not as simple as you had probably hoped rule): say "A buzzer sounds from somewhere out of sight, and an invisible wall of force prevents you from leaving." Section - Interest Vault (p_vault) A vault called an interest vault is in Abandoned Bank. "A vault labeled 'INTEREST PAID' is open in the wall[if the interest vault is not empty]. Inside [is-are vault-style list of contents of interest vault][end if]." Section - Overhead Vault (q_vault) A vault called an overhead vault is in Abandoned Bank. "A vault labeled 'OVERHEAD' is open in the wall[if the overhead vault is not empty]. Inside [is-are vault-style list of contents of overhead vault][end if]." Section - Basis Vault (r_vault) A vault called a basis vault is in Abandoned Bank. "A vault labeled 'BASIS' is open in the wall[if the basis vault is not empty]. Inside [is-are vault-style list of contents of basis vault][end if]." Section - Twenty Coins (c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49) 20 coins are in the basis vault. Section - Loans Vault (s_vault) A vault called a loans vault is in Abandoned Bank. "A vault labeled 'LOANS' is open in the wall[if the loans vault is not empty]. Inside [is-are vault-style list of contents of loans vault][end if]." Understand "loan" as the loans vault. Section - Bank Memo (bank_memo) [Note that the size of this item has been reduced to 10 from the original source code's value of 15, to make it in line with other things of similar type.] A bank memo is in Abandoned Bank. "A typewritten memo lies forgotten amidst the dust here." It is papery. The description of the bank memo is "BANK WORKER GUIDELINES[paragraph break]If at any point, account activity has been suspended (i.e. all regular account vaults have no funds) then it must be ensured that 20 zorkmids remain in basis, for potential loan requests.[paragraph break]Otherwise, vaults must be maintained as follows:[paragraph break][3 spaces]1) For interest waiting to be paid, the amount must equal the amount held in the loan payments vault. If this amount goes over the loan payments, talk to your local gnome manager to see about getting some outstanding loans paid back.[paragraph break][3 spaces]2) Overhead should be kept at the amount in interest plus five.[paragraph break][3 spaces]3) Loan payments should be kept at a positive amount.[paragraph break]Make sure that both the loan and interest vaults are maintained properly, and, at the same time, the overhead vault is maintained while the basis vault is kept at a non-suspended bank amount. If this is not the case, you may need to put some overtime in to straighten out the bank funds." The size of the bank memo is 10. Understand "typewritten" as the bank memo. Chapter - Farm (Farm) A room called Farm is southwest of Southern Fublio Valley. "You're standing in front of a small farmhouse. A trail leads northeast, a sand bar lies to the southwest, and another trail heads east." The trail is in Farm. [See "Flower Garden" for declaration of this backdrop.] Section - Farmhouse (farmhouse) A farmhouse is scenery in Farm. The description of the farmhouse is "A small farmhouse, barely a shack." Understand "house" as the farmhouse. Instead of entering the farmhouse (this is the urge to explore DENIED rule): say "The farmhouse is run-down enough already without you stomping around in it." Section - Farmer (farmer) A man called a farmer is in Farm. "There's a tired-looking farmer here." The description of the farmer is "It looks like he's been working pretty hard in the sun." Understand "tired-looking" or "tired" as the farmer. Instead of attacking the farmer (this is the don't kick farmers when they're down rule): pity the poor farmer. Instead of throwing something at the farmer (this is the don't chuck things at farmers when they're down rule): pity the poor farmer. To pity the poor farmer: say "Something about attacking a down-on-his-luck farmer just doesn't seem right, so you stop." [Note: Several synonyms are added for the topics covered in the original, and some topics are replaced with "querying it about" rules.] The farmer recognizes the oyster beds and the oysters. Understand "oyster farm" or "oyster farming" or "farming" or "his farm" or "farm" or "luck" or "his luck" as "[farm]". Instead of querying the farmer about the oysters (this is the treat querying farmer about oysters as asking him about farm generally rule): try asking the farmer about "[farm]" instead. Instead of querying the farmer about the oyster beds (this is the treat querying farmer about oyster beds as asking him about farm generally rule): try asking the farmer about "[farm]" instead. Instead of querying the farmer about the farmer (this is the treat querying farmer about himself as asking him about farm generally rule): try asking the farmer about "[farm]" instead. Instead of asking the farmer about "[farm]" (this is the regrets are easy but aquaculture is hard rule): say "'Did a foolish thing, sir -- tried my luck with oyster farming this year. The place is too far from the sea, and I can't get any oysters in my beds, [']cause there's no water to grow [']em in.'" Instead of showing a sphere to the farmer (this is the no need to mention any further details about it until you terrorize the area with a tidal wave rule): say "'Hey, I seen something like that once.'" To witness the farmer's rueful decline: say "The farmer smiles, but shakes his head." Instead of giving something to the farmer (this is the farmer is not interested in taking charity rule): witness the farmer's rueful decline. Instead of telling the farmer about something (this is the farmer disavows all interest in what you have to say rule): witness the farmer's rueful decline. This is the farmer default life behavior rule: say "The farmer is preoccupied with something as he squints into the sun." Instead of doing something when the current action is generic life behavior and the current action involves the farmer (this is the farmer generic life rule): abide by the farmer default life behavior rule. Persuasion rule for asking the farmer to try doing something (this is the reroute understood orders to farmer to generic life response rule): consider the farmer default life behavior rule; rule fails. To plead simplicity of vocabulary: say "'I'm just a simple farmer, sir. I'm afraid you're losing me with your fancy words.'" After greeting the farmer (this is the farmers are friendly rule): say "The farmer nods in your direction. 'How do, stranger?'" After casting foblub at the farmer (this is the agrarian types are hard to excite rule): plead simplicity of vocabulary. After casting espnis at the farmer (this is the agrarian types are hard to bore too rule): plead simplicity of vocabulary. Every turn when the farmer is at hand and the coastline is not altered (this is the new business ventures should always be carefully vetted rule): if a random chance of 1 in 10 succeeds: say "'[']Forget zucchini,['] they told me, [']Go into oyster farming. You'll make a fortune.['] Ha!'" Every turn when the farmer is at hand and the farmer carries the silver sphere (this is the it seems doubtful that this reward motivated the player rule): remove the farmer from play; now the player carries the silver sphere; say "The farmer sees you approach and rushes to greet you. 'I saw what you did, sir, yes indeed. A mighty crazy thing to do, calling a volcano outa the water like that. But you did it! And my oyster beds thank you kindly! I'd like to repay the favor, but I'm only a poor farmer.'[paragraph break]He pauses, then searches his pockets. 'Here,' he says, putting something in your hand. 'Found it digging in the sand. Don't know what it is, but I'll bet you can use it.' He smiles and disappears into the farmhouse." Section - Silver Sphere (silver_sphere) There is a sphere called a silver sphere. The color of the silver sphere is "silver". Chapter - Oyster Farm (Veg_fields) [Note that the original version of this object made use of the I6 'general' attribute to track whether the coastline had been altered by throwing the toy volcano into the bay. Several other objects would also have their 'general' flags set on after this event. For readability and simplicity, this implementation uses a single thing (the coastline) with a single condition property ("altered") to replace all of the other dependent states. Also note that the Great Sea backdrop is added to the location in this implementation, and an indication of the way back to the farm is added to the description.] A room called Oyster Farm is southwest of Farm. "A coastline sand bar curves west a short distance here, ending in a shoal of large rocks.[paragraph break]The path from the northeast peters out here, where someone has dug some shallow holes in the sand. Someone is probably farming for live Rotund Oysters, a popular Eastland delicacy[if the coastline is not altered]. Unfortunately, the oyster beds are too far inland, and they appear to be empty[else]. The oyster beds are filled with water (similar to a good portion of the shoal) and look well stocked[end if][if the half-submerged cave is on-stage]. A bit to the west you can see a small shoreline cave in the rocks[end if]." North of Oyster Farm is nowhere. [Overrides assumption that it is south of Damp Dark Cave.] A sand bar and a shoal of large rocks are unimportant scenery in Oyster Farm. The path is in Oyster Farm. [See "Forest Garden" for declaration of this backdrop.] The Great Sea is in Oyster Farm. [See "Swank Waterfront" for declaration of this backdrop.] After going west from Oyster Farm when the coastline is not altered and Damp Dark Cave is unvisited (this is the dramatic entry into dark damp cave rule): say "You try to head towards the cave, but the unstable rocks and sea waves make it difficult to get there from here. Suddenly, a rock slips from underfoot! You fall...[line break]"; continue the action. Instead of going west from Oyster Farm when the coastline is altered and Damp Dark Cave is visited (this is the can only get to the cave this way once rule): say "You try to head towards the cave, but the unstable rocks and sea waves make it impossible to get there from here." Instead of going west from Oyster Farm when the coastline is altered (this is the magical terraforming can have game-breaking consequences rule): say "Any remainder of the sand bar west is now submerged by a high tide or rise in the sea." Section - Half-Submerged Cave [Note that this proxy entrance does not exist in the original.] A proxy entrance called a half-submerged cave is in Oyster Farm. The relevant direction of the half-submerged cave is west. Understand "small" or "shoreline" as the half-submerged cave. Section - Oyster Beds (oyster_beds) [Note that this object did not have a defined size in the original source code. It is arbitrarily given a size of 75 to prevent the size check from intercepting attempts to put things into it, but putting things into it is normally prohibited (see below).] A scenery watery plural-named container called some oyster beds are in Oyster Farm. The description of the oyster beds is "Some shallow[if coastline is altered], mostly empty holes in the sand[else] holes in the sand, filled with sea water[end if]." The size of the oyster beds is 75. Understand "hole" or "holes" or "bed" or "sand" as the oyster beds. [Note that since we don't want to encourage direct interaction with the oysters, it seems courteous to prevent them from appearing in the description of the oyster beds.] Carry out examining the oyster beds when only the oysters are in the oyster beds (this is the suppress listing of oyster bed contents when examining rule): consider the standard examining rule; rule succeeds. [Forces halt to carry out rulebook processing before moving on to standard examining rule.] Instead of inserting something into the oyster beds (this is the adventurers like putting things into things rule): say "Someone is obviously trying to use these holes for oyster farming. Best to leave them as you found them." Instead of entering or swimming in the oyster beds (this is the oyster beds aren't for swimming rule): say "You're no oyster." After searching the oyster beds while the coastline is not altered (this is the skip the seafood rule): say "You uncover a couple of immature and lethargic oysters and throw them back." After searching the oyster beds while the coastline is altered (this is the still no seafood rule): say "You dig about for a bit; the oysters seem much livelier now, quickly reburying themselves." Section - Oysters [Note that these do not appear in the original source code.] An animal-like plural-named thing called some oysters is in the oyster beds. The description of the oysters is "There are probably some oysters buried at the bottom of the beds, but none are in plain sight." To indicate the inaccessibility of the oysters: say "The oysters are buried in the sand at the bottom of the beds." Instead of doing something to the oysters when the action requires a touchable noun (this is the oysters are buried and can't be directly interacted with rule): indicate the inaccessibility of the oysters. Instead of doing something when the oyster beds are at hand and the second noun is the oysters and the action requires a touchable second noun (this is the oysters are buried and can't be indirectly interacted with rule): indicate the inaccessibility of the oysters. Chapter - Dark Damp Cave (FUBLIO_Cave) [Note that the original version of this object made use of the I6 'general' attribute to track whether the player could reach it by going west from Oyster Farm (allowed the first time only). Since this method appears to be the only way to reach the room, this implementation uses the built-in 'visited' property for the same purpose. Also note that this object had "tunnel" as a room synonym and a property called 'number' to track the accessibility of its southern exit. Since this implementation creates real objects to simulate I6 behavior, a real tunnel object is added below, and a condition property of it is used to frame equivalent logic.] There is a dark room called Dark Damp Cave. "You seem to be in some underground cave.[if small dark tunnel is obscure] There are no visible exits. You feel rather claustrophobic. You also hear some unexpected noises[else] There is a small dark tunnel leading south. You hear the sounds of rushing water from somewhere nearby[end if]." West from Oyster Farm is Dark Damp Cave. South from Dark Damp Cave is Oyster Farm. East from Dark Damp Cave is nowhere. [This last to counteract assumption of reciprocity of going west from Oyster Farm.] Instead of going nowhere in Dark Damp Cave when the noun is outside (this is the no sorry this is a puzzle rule): say "Yes, but which way?" Instead of going south from Dark Damp Cave when the small dark tunnel is obscure (this is the you would think a tunnel wouldn't be so hard to see rule): abide by the fake can't go that way rule. Instead of going south from Dark Damp Cave when the small dark tunnel is flooded (this is the my kingdom for some scuba gear rule): say "The dark tunnel becomes blocked after a short distance by a great tidal swell. The sea has risen above the entrance!" After going south from Dark Damp Cave (this is the dramatic exit from seaside cave rule): now the small dark tunnel is flooded; say "You crawl through the dark tunnel, which seems to snake back and forth. After what seems like an eternity, you see daylight, and stumble forward.[paragraph break]You find yourself on the sand bar again. Looking back, you can't locate the tunnel you just left at all."; continue the action. [Note change from the original version, as a hint to meditate.] After listening to Dark Damp Cave (this is the which noises are unexpected then rule): say "[if the mad hermit is at hand]Aside from the hermit's gibberish, you hear [otherwise]You [end if]hear only the lulling sounds of the sea all around you." [Note the change of "musty" for "briny" in the following message because I've never smelt a musty sea.] After smelling Dark Damp Cave (this is the Kramer would have a hard time in this universe rule): say "You smell the briny odor of the sea." After meditating in Dark Damp Cave when the small dark tunnel is obscure and the small dark tunnel is not at hand (this is the alternate and easier solution for hermit challenge rule): now the small dark tunnel is revealed; now the small dark tunnel is in Dark Damp Cave; say "You focus inward, using the calming sound of the water's motion to block out [if the mad hermit is at hand]the madman's meanderings[otherwise]everything else[end if]. The intricacies of the echoes within the cave engulf you, and your mind slowly empties.[paragraph break]Some time later, a new thought intrudes: The echoes are not all the same. There is an area to the south where they sound different. You open your eyes again to look at the area more closely,and you see that there is a tunnel there, after all[if the mad hermit is at hand].[paragraph break]The hermit's laughter snaps your attention back to him once more. 'Wise, this one! He sees what he cannot see with eyes that are not eyes.' He grins fiercely[end if]." Section - Absent Sea [Note that this object was not found in the original source code, but the following thing has been inserted to add color and present a more sensible response.] An absent uniquely-named fixed in place thing called the sea is in Dark Damp Cave. Instead of listening to the sea in Dark Damp Cave (this is the redirect listening to the absent sea to just listening rule): try listening instead. The redirect listening to the absent sea to just listening rule is listed before the can't interact with absent things rule in the instead rules. Instead of smelling the absent sea in Dark Damp Cave (this is the redirect smelling the absent sea to just smelling rule): try smelling instead. The redirect smelling the absent sea to just smelling rule is listed before the can't interact with absent things rule in the instead rules. Section - Small Dark Tunnel [Note this starts off-stage and is moved to the Dark Damp Cave by an interaction with the hermit, to prevent it being accessible to the player before it is revealed.] There is a proxy entrance called a small dark tunnel. The relevant direction of the small dark tunnel is south. The small dark tunnel can be obscure, revealed, or flooded. The small dark tunnel is obscure. Section - Spotted Scroll (spotted_scroll) In Dark Damp Cave is a scroll called a spotted scroll. The spotted scroll is inscribed with bekdab. Section - Mad Hermit (mad_hermit) [Note that this object originally had its I6 'transparent' attribute set, so he would normally be given the "open-inventoried" property here (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part). However, the addition of the "scene business" mention of him concealing the wet parchment, plus his generally mysterious nature, results in his being made a "close-inventoried" person here. Also note that, in the original source code, this object's I6 'Life()' property does not have a 'default' section (though it does have sections applicable to the I6 Answer and Order actions), which means there is no direct application possible for the "generic life behavior" rules used here without changing the behavior as compared to release 3/960606. Since the hermit is such an unusual figure, it seems fitting that his responses should deviate from the norm, so this implementation attempts to emulate original behavior. Finally, note the changes in responses vs. the original.] A man called a mad hermit is in Dark Damp Cave. The description of the mad hermit is "He looks quite crazed -- his wild eyes are almost unbearable to watch. His clothes are complete tatters, and he looks rather emaciated." Understand "emaciated" or "madman" as the mad hermit. Some wild eyes are an animal-like thing part of the mad hermit. The description of the wild eyes is "His searing gaze makes you distinctly nervous, and you quickly look away." The mad hermit wears some tattered clothes. Understand "complete" or "tatters" as the tattered clothes. An unimportant thing called the remains of a pocket are part of the tattered clothes. The mad hermit recognizes the small dark tunnel. Instead of querying the mad hermit about the small dark tunnel (this is the treat querying hermit about tunnel as asking about exit generally rule): try asking the hermit about "exit" instead. Instead of asking the mad hermit about "exit" (this is the hermit won't hear of you leaving rule): say "The hermit laughs. 'You want to leave already? Very well, you'll find the exit where you came in.'" Instead of asking the mad hermit about "entrance" (this is the hermit has no pity for the unobservant rule): say "The hermit chuckles. 'Forgotten where you came in? It hasn't gone anywhere.'"; if the small dark tunnel is obscure: now the small dark tunnel is revealed; now the small dark tunnel is in Dark Damp Cave; say "[line break]He points at a space in the south wall, which you realize is actually a well-hidden tunnel." Instead of asking the mad hermit about "food/fish/fishes" (this is the hermit has a complex and nuanced view of nutrition rule): say "'My friends of the deep, they sacrifice themselves for me, as I will some day for them.'" [Note that the following response is not in the original, but seems appropriate to encourage player interest in the wet parchment.] Instead of querying the mad hermit about the mad hermit (this is the not exactly a detailed autobiography rule): say "'Who am I?' He stares. 'I am me!'" Instead of querying the mad hermit about the wet parchment (this is the hermit is not forthcoming about parchment rule): create an expectant pause with the mad hermit asking the hermit's challenge about the parchment; say "'It is a secret,' he says, his eyes burning fiercely, 'a secret for those who seek the Truth! Do you wish to know it?'" Hermit's challenge about the parchment is a binary reply. The positive rejoinder of the hermit's challenge about the parchment is "The hermit capers madly. 'If wishes were fishes we'd never go hungry!'" The negative rejoinder of the hermit's challenge about the parchment is "The hermit glares at you balefully." [ Table of Hermit Remapped Subjects Topic Substitution (text) "home/here" "cave" "his home/cave/life" "cave" "life in cave/home" "cave" "life in the/his/this cave/home" "cave" "the/this cave/place" "cave" "ingress" "entrance" "entrance to cave/here" "entrance" "entrance to this/his/the cave/place" "entrance" "how/where he/I came/got in/here" "entrance" "how/where he/I came/got in/into cave/here" "entrance" "how/where he/I came/got in/into this/his/the cave/place" "entrance" "how/where he/I entered" "entrance" "how/where he/I found his/the way in" "entrance" "where entrance/ingress is" "entrance" "where the entrance/ingress is" "entrance" "egress" "exit" "escape/escaping" "exit" "escape path/route" "exit" "getting/going out/outside" "exit" "getting/going out/outside of here/cave" "exit" "getting/going out/outside of this/his/the cave/place" "exit" "how/where I can leave/depart/escape" "exit" "how/where I can leave/depart escape cave/here" "exit" "how/where I can leave/depart/escape this/his/the cave/place" "exit" "how/where I can get/climb out" "exit" "how/where to leave/depart/escape" "exit" "how/where to leave/depart/escape here/cave" "exit" "how/where to leave/depart/escape this/his/the cave/place" "exit" "how/where to go/get/climb out of here/cave" "exit" "how/where to go/get/climb out/home/back" "exit" "how/where to go/get/climb back out" "exit" "how/where to go/get/climb back out again" "exit" "how/where to go/get/climb out again" "exit" "how/where to leave/depart/escape" "exit" "how/where to leave here/cave" "exit" "how/where to leave this/his/the cave/place" "exit" "how/where to return" "exit" "leaving" "exit" "location of exit" "exit" "location of the/his exit" "exit" "the way out" "exit" "way out" "exit" "where exit/egress is" "exit" "where the exit/egress is" "exit" "monster/monsters" "grues" "who/what/where Humboz is/was" "humboz" "who/what/where is/was Humboz" "humboz" "how/what he eats" "hunger" "how he gets/finds food" "hunger" "hungry" "hunger" "starvation/starving" "hunger" "where he gets/finds food" "hunger" "answer/solution" "solution" "algebra" "solution" "algebraic solution" "solution" "equations" "solution" "math/mathematics" "solution" "secret" "solution" "truth" "solution" "shining tower on a/the hill" "tower" "shining tower on hill" "tower" "shining tower" "tower" "tower on a/the hill" "tower" "tower on hill" "tower" "new/old world" "world" ] [The next set of rules is really long and not that interesting, but they reflect the range of remapped responses in the preceding commented-out table.] Instead of asking the mad hermit about "home/here" (this is the reroute hermit topics to cave topic 1 rule): try asking the mad hermit about "cave" instead. Instead of asking the mad hermit about "his home/cave/life" (this is the reroute hermit topics to cave topic 2 rule): try asking the mad hermit about "cave" instead. Instead of asking the mad hermit about "life in cave/home" (this is the reroute hermit topics to cave topic 3 rule): try asking the mad hermit about "cave" instead. Instead of asking the mad hermit about "life in the/his/this cave/home" (this is the reroute hermit topics to cave topic 4 rule): try asking the mad hermit about "cave" instead. Instead of asking the mad hermit about "the/this cave/place" (this is the reroute hermit topics to cave topic 5 rule): try asking the mad hermit about "cave" instead. Instead of asking the mad hermit about "ingress" (this is the reroute hermit topics to entrance topic 0 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "entrance to cave/here" (this is the reroute hermit topics to entrance topic 1 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "entrance to this/his/the cave/place" (this is the reroute hermit topics to entrance topic 2 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "how/where he/I came/got in/here" (this is the reroute hermit topics to entrance topic 3 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "how/where he/I came/got in/into cave/here" (this is the reroute hermit topics to entrance topic 4 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "how/where he/I came/got in/into this/his/the cave/place" (this is the reroute hermit topics to entrance topic 5 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "how/where he/I entered" (this is the reroute hermit topics to entrance topic 6 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "how/where he/I found his/the way in" (this is the reroute hermit topics to entrance topic 7 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "where entrance/ingress is" (this is the reroute hermit topics to entrance topic 8 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "where the entrance/ingress is" (this is the reroute hermit topics to entrance topic 9 rule): try asking the mad hermit about "entrance" instead. Instead of asking the mad hermit about "egress" (this is the reroute hermit topics to exit topic 1 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "escape/escaping" (this is the reroute hermit topics to exit topic 2 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "escape path/route" (this is the reroute hermit topics to exit topic 3 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "getting/going out/outside" (this is the reroute hermit topics to exit topic 4 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "getting/going out/outside of here/cave/place" (this is the reroute hermit topics to exit topic 4B rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "getting/going out/outside of this/his/the cave/place" (this is the reroute hermit topics to exit topic 4C rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where I can leave/depart/escape" (this is the reroute hermit topics to exit topic 5 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where I can leave/depart/escape cave/here" (this is the reroute hermit topics to exit topic 6 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where I can leave/depart/escape this/his/the cave/place" (this is the reroute hermit topics to exit topic 7 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where I can get/climb out" (this is the reroute hermit topics to exit topic 8 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to leave/depart/escape" (this is the reroute hermit topics to exit topic 9 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to leave/depart/escape here/cave" (this is the reroute hermit topics to exit topic 10 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to leave/depart/escape this/his/the cave/place" (this is the reroute hermit topics to exit topic 11 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to go/get/climb out of here/cave" (this is the reroute hermit topics to exit topic 12 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to go/get/climb out/home/back" (this is the reroute hermit topics to exit topic 13 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to go/get/climb back out" (this is the reroute hermit topics to exit topic 14 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to go/get/climb back out again" (this is the reroute hermit topics to exit topic 15 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to leave/depart/escape" (this is the reroute hermit topics to exit topic 16 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to leave here/cave" (this is the reroute hermit topics to exit topic 17 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to leave this/his/the cave/place" (this is the reroute hermit topics to exit topic 18 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "how/where to return" (this is the reroute hermit topics to exit topic 19 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "leaving" (this is the reroute hermit topics to exit topic 20 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "location of exit" (this is the reroute hermit topics to exit topic 21 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "location of the/his exit" (this is the reroute hermit topics to exit topic 22 rule): try asking the mad hermit about "exit" instead. Instead of querying the mad hermit about outside (this is the reroute querying hermit about outside direction to exit topic rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "the way out" (this is the reroute hermit topics to exit topic 23 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "way out" (this is the reroute hermit topics to exit topic 24 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "where exit/egress is" (this is the reroute hermit topics to exit topic 25 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "where the exit/egress is" (this is the reroute hermit topics to exit topic 26 rule): try asking the mad hermit about "exit" instead. Instead of asking the mad hermit about "monsters/monster" (this is the reroute hermit topics to grue topic 1 rule): try asking the mad hermit about "grue" instead. Instead of asking the mad hermit about "who/what/where Humboz is/was" (this is the reroute hermit topics to Humboz topic 1 rule): try asking the mad hermit about "humboz" instead. Instead of asking the mad hermit about "who/what/where is/was Humboz" (this is the reroute hermit topics to Humboz topic 2 rule): try asking the mad hermit about "humboz" instead. Instead of asking the mad hermit about "how/what he eats" (this is the reroute hermit topics to hunger topic 1 rule): try asking the mad hermit about "hunger" instead. Instead of asking the mad hermit about "how/where he gets/finds food" (this is the reroute hermit topics to hunger topic 2 rule): try asking the mad hermit about "hunger" instead. Instead of asking the mad hermit about "hungry/starvation/starving" (this is the reroute hermit topics to hunger topic 3 rule): try asking the mad hermit about "hunger" instead. Instead of asking the mad hermit about "answer/solution" (this is the reroute hermit topics to solution topic 1 rule): try asking the mad hermit about "solution" instead. Instead of asking the mad hermit about "algebra/equations/math/mathematics" (this is the reroute hermit topics to solution topic 2 rule): try asking the mad hermit about "solution" instead. Instead of asking the mad hermit about "algebraic solution" (this is the reroute hermit topics to solution topic 3 rule): try asking the mad hermit about "solution" instead. Instead of asking the mad hermit about "secret/truth" (this is the reroute hermit topics to solution topic 4 rule): try asking the mad hermit about "solution" instead. Instead of asking the mad hermit about "shining tower on a/the hill" (this is the reroute hermit topics to tower topic 1 rule): try asking the mad hermit about "tower" instead. Instead of asking the mad hermit about "shining tower on hill" (this is the reroute hermit topics to tower topic 2 rule): try asking the mad hermit about "tower" instead. Instead of asking the mad hermit about "shining tower" (this is the reroute hermit topics to tower topic 3 rule): try asking the mad hermit about "tower" instead. Instead of asking the mad hermit about "old/new world" (this is the reroute hermit topics to world topic 1 rule): try asking the mad hermit about "world" instead. Instead of asking the mad hermit about a topic listed in the Table of Gibberish (this is the additional mad hermit response to questions rule): say "[response entry][paragraph break]". Table of Gibberish Topic Response "cave" "'Yes. A good home... a new world... my world...'" "door/doors" "Doors are everywhere. They are nowhere. Look! See! Don't you see? There is nothing to see -- the eyes lie!' He claws at his eyes." "grue/grues" "'They came in the dark, but they come no more,' he weeps inconsolably. 'They were delicious!'" "Humboz" "'You don't fool me, Humboz! No, you don't!'" "hunger" "'Sometimes I hunger, yes! I hunger until the fish come.'" "lighthouse" "'It holds a secret, too -- and danger!'" "solution" "'I had it! I had it! It slipped away, but I still see... sometimes...' He whimpers pitiably." "tower" "'Oh, how it shines... the light lives within, and I fear it!' He hugs himself tightly." "world" "'This world is better, oh, yes. Better, better...'" Instead of asking the mad hermit about something (this is the generic mad hermit response to questions rule): say "[one of]'Many are the secrets I keep, I keep!'[or]'Questions, questions! Ask, ask, ask!' he cackles.[or]'Will that secret help you here and now? I think not!'[at random][conditional paragraph break]". Instead of giving something edible to the mad hermit (this is the will advance plot for food rule): now the noun is off-stage; say "The hermit greedily takes [the noun] and gobbles [object pronoun of the noun] quickly."; if the mad hermit carries the wet parchment: now the player carries the wet parchment; say "[line break]'Good, yes. I have something for you -- something you will treasure as I have.' He gives you a piece of parchment." Instead of giving something to the mad hermit (this is the mad hermit apparently has many possessions not immediately apparent rule): say "'No, no, I already have many of those.'" To discourage harassing the hermit: say "The hermit cowers in one corner of the cave, screaming. You stop, and reconsider." Instead of attacking the mad hermit (this is the no abuse of the hermit please rule): discourage harassing the hermit. Instead of throwing something at the mad hermit (this is the no target practice with the hermit please rule): discourage harassing the hermit. Instead of asking the mad hermit to try doing something (this is the mad hermits are not known for cooperation rule): discourage harassing the hermit. Instead of kissing the mad hermit (this is the violins swell at this poignant moment rule): say "Tears run down the hermit's cheek." [Note that, in the original source code, the following response appears to have been intended when the player told the hermit about a food item. This logic does not function in release 3/960606, however. This implementation adds it as a response to showing the hermit food as a hint that he will trade the parchment for food.] Instead of showing something edible to the mad hermit (this is the Pavlovian conditioning is evident here rule): say "The hermit visibly salivates." To demonstrate stereotypical behavior of psychopathology: say "The hermit gibbers maniacally." Instead of showing something to the mad hermit (this is the mad hermit has no constructive response to being shown most things rule): demonstrate stereotypical behavior of psychopathology. Instead of telling the mad hermit about something (this is the mad hermit has no constructive response to new information rule): demonstrate stereotypical behavior of psychopathology. After casting a spell at the mad hermit (this is the hermit has discovered a novel defense against spells rule): say "The hermit joins in with your chanting, and twists the meaning of the words! You quickly stop." After greeting the hermit (this is the where have I seen him before rule): create an expectant pause with the hermit asking the hermit's challenge about meeting before; say "'We meet again, do we not?'" The hermit's challenge about meeting before is a binary reply. The positive rejoinder of the hermit's challenge about meeting before is "'Yes,' the hermit grins wildly, 'echoes in this cave, echoes through time.'" The negative rejoinder of the hermit's challenge about meeting before is "The hermit looks askance at you, grinning slyly. 'Oh, but I know you! Yes, indeed, I know you.'" At the time when the hermit grows worshipful: say "The hermit seems to recognize you through his madness. 'You have returned! The Big Man! Biggest of them all! Returned to deliver me from my prison. I had never forsaken you!'[paragraph break]'Wait,' you protest, 'stop this madness!'[paragraph break]But the crazed hermit continues. He prostrates in front of you and babbles incoherently. 'I put all my faith in you -- I have to leave here, before I go insane! The others, they abandoned hope. But not me. No! You have always had our best interests in mind.'[paragraph break]He begins an eerie, frenetic song that jars your very soul. You watch the water level start to rise near the southern entrance, and wait for the end."; end the game in death. [Note the addition of another random behavior of the hermit, to hint to players that he has the wet parchment, and the change in the frequency of giggling responses compared to the original.] Every turn when the mad hermit is at hand and Expectant Pause is not happening (this is the mad hermit scene business rule): let i be a random number between 1 and 12; if i is: -- 1: say "The hermit stares at you and screams. 'Demon, trickster -- you'll not fool me again!'"; -- 2: say "The hermit smiles at you. 'Come to pay your respects to an old man, Humboz? I know it's you.'"; -- 3: say "The hermit shrinks into a corner and weeps. 'No more, no more! I can help you no more.'"; -- 4: say "The hermit hums a little tune."; -- 5: say "The hermit talks to someone or something unseen. 'Closer, closer, nary a sound betray...'"; -- 6: say "The hermit grabs your shoulder. 'I am hampered,' he pleads with you, 'by the lack of an algebraic solution! That was where I went wrong!'"; -- 7: say "The hermit babbles something about a shining tower on a hill."; -- 8: say "The hermit pauses. 'Listen, do you hear them? The voices -- everywhere!'"; -- 9: say "[if the hermit carries the wet parchment]The hermit starts to pull a piece of [wet parchment] from the remains of a pocket, but, on noticing that you are watching him, quickly thrusts it back[otherwise]The hermit's fingers steal absently-mindedly to his pocket, feeling for something no longer there[end if]."; -- otherwise: say "The hermit giggles for no reason." Section - Wet Parchment (p1) The mad hermit carries a parchment called a wet parchment. The description of the wet parchment is "'...evidence that there are more demons like the evil Anabais! In fact, I suspect that four demons, not one, faced the Ancient Ones in spiritual battle at the dawn of time. To even suspect this verges on heresy, but...'". The wet parchment is recognized by the mad hermit. Chapter - Grassland Beach (Grasslands) [Note that some of the logic attached to this object in the original version (concerning movement restrictions with/without boat) have been moved to the section titled "Small Sailboat" below. Also note the minor change in the location's description, to avoid implying that it is possible to sail east to the tower.] A room called Grassland Beach is east of Farm and south of Southern Fublio Valley. "[if coastline is not altered]A beautiful beach with lots of tall grasses hides behind a short dune here. The Great Sea stretches out to the south.[else]A deep marsh hides behind a short dune here. The Great Sea is making some inroads, apparently. That volcano in the water to the south may have something to do with it.[end if] From here, you can go inland to the north, or west or east along shoreside paths. You can just make out a tower-like structure at the end of the eastern path, which bends in a southeasterly direction, following the shoreline." A short dune is unimportant scenery in Grassland Beach. Some tall grasses are a vegetable-like backdrop in Grassland Beach. Understand "grass" as the tall grasses. An unimportant scenery thing called a beach is in Grassland Beach. Understand "sand" or "shore" as the beach. An unimportant scenery thing called some shoreside paths are in Grassland Beach. Understand "eastern" or "path" as the shoreside paths. The Great Sea is in Grassland Beach. [See "Swank Waterfront" for declaration of this backdrop.] An unimportant distant view called a lighthouse is in Grassland Beach. Understand "tower" or "tower-like" or "structure" as the lighthouse. There is an unimportant scenery thing called a deep marsh. [Will be moved here after "correct" eruption.] Instead of going south from Grassland Beach when the player is not in the sailboat (this is the can't walk on water so try swimming rule): try swimming in the seawater instead. Instead of swimming in Grassland Beach (this is the when will we ever see a game with swimming in it rule): try swimming in the seawater instead. Instead of swimming in the seawater when the location is Grassland Beach (this is the can't swim at beach rule): say "The tides here make swimming inadvisable." Section - Small Sailboat (sailboat) [Note that this object was a static enterable container in the original version, but here it is implemented as a vehicle as defined in I7's standard rules, which has comparable properties. Also note that it made use of the I6 'general' attribute to track whether it is damaged by the volcano eruption, a setting triggered by the eruption sequence. This seems like a detail change worth modeling on its own for future flexibility, so here it is implemented as a condition property called 'damaged'. While the name 'Minirva' seems like it could be a misspelling of Minerva, I don't want to presume that the name of an old Antharian goddess of the sea should be the same as the name of an ancient Roman goddess of wisdom, so the original spelling is left as is. Finally, this object is given an initial appearance to avoid having to see the obnoxious "(empty)" in its default paragraph. We will assume anything within the boat is not visible from most vantage points outside it.] A vehicle called a small sailboat is in Grassland Beach. "[if the small sailboat is damaged]A storm-tossed wreck lies abandoned on the beach here[else if the location is Near Submerged Lighthouse]A small sailboat bobs in the waves nearby, fortunately close enough to reach[else]A small sailboat has been dragged onto the beach here, just beyond reach of the waves lapping the shore[end if]." The small sailboat can be damaged. The description of the small sailboat is "[if the small sailboat is not damaged]A small but sturdy sailboat that looks pretty sea-worthy. The word 'MINIRVA' is painted on one side[else]A badly damaged sailboat. Several places bear deep cracks, as though the boat had been tossed in a violent storm[end if]." The printed name of the small sailboat is "sailboat". The carrying capacity of the small sailboat is 15. The size of the small sailboat is 30. Understand "sturdy" or "boat" as the small sailboat. Understand "badly" or "damaged" or "badly-damaged" or "crack" or "cracks" or "wreck" as the small sailboat when the small sailboat is damaged. Check sailing the small sailboat when the player is not in the small sailboat (this is the encourage player to board boat when they try to sail it rule): say "You'd have to get into [object pronoun of the noun], then sail the direction you wish to go." instead. Check sailing the small sailboat when the player is in the small sailboat (this is the encourage player to sail a direction when they try to sail boat rule): say "Please indicate the direction you wish to go." instead. Instead of taking the small sailboat (this is the it's not a toy boat rule): say "That's too cumbersome to carry." [See note in section "Prison Cell" for a technical note about the original source code logic producing the following message.] Instead of going somewhere by the small sailboat when the small sailboat is damaged (this is the only seaworthy boats can sail rule): say "In its current condition, this boat is lucky to be floating." After casting fiznav at the small sailboat (this is the fiznav repairs the sailboat if it is damaged rule): say "You perform a liturgy to the Sea Gods[run paragraph on]"; if the small sailboat is damaged: now the small sailboat is not damaged; accomplish ship-shape; say ", and before your very eyes, the sailboat repairs itself!"; otherwise: say ". However, the boat seems unchanged." Definition: a room is boat-accessible if it is in Navigable Waters or it is adjacent to a room in Navigable Waters. Instead of going somewhere to somewhere by the small sailboat when the room gone to is not boat-accessible (this is the boats are for sailing not driving rule): say "You'll have to get out of the sailboat first." Section - Fur Sack (sack) [Note that this thing has been nominated as the game's player's holdall -- a nicety provided by default in I7 (see WWI 3.21) that helps offset the nuisance value of the player object's carrying capacity -- since it was given a relatively large size parameter and can be found relatively early by the PC. In the original version, it is just another container.] A openable player's holdall called a fur sack is in the small sailboat. The description of the fur sack is "A fairly large sack made of furs and animal hides." The size of the fur sack is 24. Chapter - On-Fublio-Bay (On_Fublio_bay) [Note that, in the original source code, this was one of many objects whose I6 'general' attribute was set by the volcano eruption. This implementation uses the state of a coastline thing to similar effect, as explained under "Oyster Farm". Also note that the I6 'each_turn' routine attached to this object has been moved to an every turn rule for the seawater.] A room called On-Fublio-Bay is south of Grassland Beach. "You are sailing on Fublio Bay. A shoreline lies to the north. You could probably sail out of the bay to the south, but I'd advise against it; the winds are unpredictable. To the northeast you can see [if the coastline is not altered]the tip of a peninsula where a lighthouse tower is standing[else]a partially submerged lighthouse tower. Also, to the southeast is a small volcanic island where you could probably land[end if]." The printed name of On-Fublio-Bay is "On Fublio Bay". On-Fublio-Bay is in Navigable Waters. A shoreline and a peninsula are unimportant scenery in On-Fublio-Bay. An unimportant backdrop called a bay is in On-Fublio-Bay. The lighthouse is in On-Fublio-Bay. [See "Grassland Beach" for declaration of this backdrop.] [Note that the following message has been promoted to the general-case "you can't go that way" message when sailing. In the original it was only used to prevent going to the volcanic island prematurely.] Instead of going nowhere in On-Fublio-Bay (this is the there were no sailing instructors at the monastery rule): say "The winds blow the wrong way, and you end up back here." [Note: the original code used an I6 'before' property in the room object to issue the following response. Since it seems the action would not have been stopped, an I7 before rule is used here.] Before going south from On-Fublio-Bay (this is the sea voyages are exciting rule): say "A sudden gust of wind sends your small craft skimming out of control!" Section - Seawater, definition of (seawater) [Note that this object defined I6 'time_left' and 'time_out' properties which are handled under different conventions in I7. The associated logic has been moved to time-based rules. Also note that, unlike nearly all other objects in the original source code, this object had a 'weight' property assigned which was not commented out and which was used in some of its logic. However, it seems to have been repurposed to indirectly represent the location where the volcano has been set off. For clarity, and to reflect the greater number of possible eruption events, this implementation uses a room that varies property that's part of the toy volcano to track this. In a similar vein, the 'number' property for this object in the original, seemingly intended to control progression of the underwater eruption's effect on it and to vary its description depending on where it was triggered, is omitted in favor of conditional description logic in the rules for describing the eruption. Finally, note that this object made use of the I6 'found_in' property to allow it to freely relocate between On-Fublio-Bay and Lost at Sea. No such equivalent seems to exist or things other than backdrops (which can't be containers) in I7, so an every turn rule is used to reposition it automatically.] There is an open scenery mass-nouned watery container called some seawater. Understand "water" or "sea" or "great" or "sea water" or "ocean" or "waves" as the seawater. The size of the seawater is 100. The description of the seawater is "Salty, blue-green water[if the player is in the small sailboat] surrounds you[end if]." Every turn when the player can see the Great Sea (this is the seas contain seawater rule): move the seawater to the location. [new kinds of mayhem when on the shore now possible!] Instead of pushing or pulling or turning or taking or attacking or rubbing or squeezing the seawater (this is the liquids break all the rules rule): say "The sea water runs through your fingers." Instead of tasting or drinking the seawater (this is the salt water is not really a beverage rule): say "You take a tentative sip. It's just salty sea water." Instead of searching or looking under the seawater during The Eruption (this is the you really want an action that changes your location at this point rule): say "There's something down there, all right." Instead of searching or looking under the seawater (this is the grouper seems to be the dominant sea life rule): if a random chance of 1 in 5 succeeds: say "You glimpse a large grouper under the water, and watch it swim away."; otherwise: say "[if the player is in the small sailboat and the location is in Navigable Waters]The water seems choppy and deep. [end if]You notice nothing beneath the waves at the moment." Instead of entering the seawater (this is the interpret entering the seawater as trying to swim in it rule): try swimming in the seawater instead. Check swimming in the seawater (this is the no sea swimming allowed rule): say "No, thank you. It's full of dangerous groupers." instead. Instead of throwing something (called the sunk item) at the seawater (this is the translate throwing things into the seawater as inserting things into the seawater rule): try inserting the sunk item into the seawater instead. Instead of putting something (called the sunk item) on the seawater (this is the translate putting things on the seawater as inserting things into the seawater rule): try inserting the sunk item into the seawater instead. After inserting something (called the sunk item) into the seawater (this is the where was that scuba gear again rule): remove the sunk item from play; say "[The sunk item] sinks into the water and is soon out of sight." After inserting the toy volcano into the seawater (this is the now you've done it rule): say "The toy volcano drops into the water and sinks like a stone." Instead of inserting an open umbrella (called the inappropriate flotation device) into the seawater (this is the umbrellas are not boats rule): remove the inappropriate flotation device from play; say "The umbrella floats on the water like a cloth dome for a short bit, but eventually sinks into the water." Every turn during The Eruption (this is the inevitable chain reaction rule): now the progression of the toy volcano is the upheaval after the progression of the toy volcano. [Note that there were some small variations between the messages below in the original code, depending on whether they were seen from On-Fublio-Bay or Lost at Sea. The most significant difference was that the mention of a dark shape rising occurs a turn earlier. Since I am taking some liberties with the prose here, anyway, the differences between descriptions are not preserved in this implementation.] Every turn when the player can see the seawater and the eruption receptacle of the toy volcano is the seawater and the eruption site of the toy volcano is the location during The Eruption (this is the player watches in glee or horror or both rule): if the eruption site of the toy volcano is the location and the eruption site of the toy volcano is in Navigable Waters: if the progression of the toy volcano is: -- inert: say "A small bubble rises to the surface with a tiny 'pop'."; -- faint: say "You notice several small bubbles rise to the surface of the sea."; -- moderate: say "There appears to be a steady stream of bubbles coming from somewhere deep in the water near you. A hissing sound is faintly audible, and the bursting of the larger bubbles is accompanied by wisps of steam."; -- severe: say "The water around you roils dangerously as you are enveloped in a cloud of hot steam. Peering anxiously at the water, you see a massive, dark shape emerging from the depths below!"; otherwise if the eruption site of the toy volcano is the location and the eruption site of the toy volcano is not in Navigable Waters: if the progression of the toy volcano is: -- inert: say "You gaze expectantly at the spot where the toy volcano went in, but nothing further happens."; -- faint: now the cloud of steam is in the eruption site of the toy volcano; say "A sudden frothing of hissing, spitting steam erupts where you threw the volcano."; -- moderate: say "The ground shakes, and a black shape thrusts above the waves. Jets of fiery, molten rock splash from its top."; now the mini-volcano is in the eruption site of the toy volcano; -- severe: say "The earthquake tapers off as the volcano stops growing. Lava continues to bubble from its top and stream down it sides."; -- peak: remove the cloud of steam from play; say "The steam dissipates and the lava hardens as it quickly cools down." The player watches in glee or horror or both rule is listed after the seas contain seawater rule in the every turn rules. Section - Cloud of Steam There is a scenery thing called a cloud of steam. The description of the cloud of steam is "This can't be good." Understand "frothing" or "hissing" or "spitting" as the cloud of steam. Instead of doing something to the cloud of steam when the action requires a touchable noun (this is the steam is not solid rule): say "Steam is water in its vapor form. It is thus not the kind of thing you can grab." Section - Mini-Volcano There is a thing called a mini-volcano. "[if The Eruption is happening]To your dismay, a newly-formed volcano is erupting here[else]An unusually small and apparently inactive volcano protrudes from [the eruption receptacle of the toy volcano][end if]." It is fixed in place. The description of the mini-volcano is "[if The Eruption is happening]You're not sure it's a good idea to stick around, what with the lava and all[else]It looks a lot like a bigger version of the toy volcano[end if]." Understand "black" or "shape" or "miniature" or "miniature" or "mini" or "volcano" as the mini-volcano. Understand "fiery" or "molten" or "rock" or "lava" or "newly-formed" or "erupting" or "eruption" as the mini-volcano when The Eruption is happening. Understand "dead" or "inactive" as the mini-volcano when The Eruption is not happening. Instead of taking the mini-volcano (this is the it's really fixed in place rule): if the eruption receptacle of the toy volcano is the seawater: say "I don't think so. I'm sure it weighs a ton."; otherwise: say "It seems to be stuck there. Perhaps it has been melted into [the eruption receptacle of the toy volcano]." Section - Small Volcanic Island There is an unimportant distant view called a small volcanic island. Understand "volcano" or "land" or "volcanic" or "island" as the small volcanic island. Chapter - Lost at Sea (Lost_at_sea) [Note that the I6 'each_turn' routine attached to this object has been moved to an every turn rule for the seawater.] A room called Lost at Sea is south of On-Fublio-Bay. "You're lost at sea. The winds are completely dead. They managed to take you quite a long way out before they died, however, and it's currently hard to tell which way land was from here[if the eruption site of the toy volcano is Lost at Sea].[paragraph break]Oddly, there's a volcano far out to the south, still smoldering from a recent eruption[end if]." Lost at Sea is in Navigable Waters. North from Lost at Sea is nowhere. [Counteracts assumption that going north will lead to "On-Fublio-Bay"] Instead of going nowhere in Lost at Sea when the noun is a cardinal direction (this is the no wind means no sailing rule): say "The winds are dead, and you're not going anywhere." Section - Absent Wind [Note that this object was implicit only as a synonym for Lost_at_sea in the original source code, but the following thing has been inserted to add color and present a more sensible response.] A fixed in place uniquely-named thing called the wind is absent in Lost at Sea. Understand "winds" as the wind. Section - Absent Land [Note that this object was implicit only as a synonym for Lost_at_sea in the original source code, but the following thing has been inserted to add color and present a more sensible response.] An absent uniquely-named fixed in place thing called the land is in Lost at Sea. Chapter - On-Peninsula (Fublio_forest) [Note that, in the original source code, this was one of many objects whose I6 'general' attribute was set by the volcano eruption. This implementation uses the state of a coastline thing to similar effect, as explained under "Oyster Farm".] A room called On-Peninsula is southeast of Southern Fublio Valley and east of Grassland Beach. "You stand [if coastline is not altered]in a clearing on a grassland peninsula. A trail leads northwest from here, and another leads west. Off to the southeast, there's an entrance into what looks like an old abandoned lighthouse, just at the tip of the peninsula[else]on the southeast tip of a grassland peninsula. A trail leads northwest from here, and another leads west. Off to the southeast, you can see the top of what looks like a lighthouse, partially submerged in the Great Sea[end if]." The printed name of On-Peninsula is "On Peninsula". The clearing is in On-Peninsula. [See "Ravine Pass" for declaration of this backdrop.] A grassland peninsula is unimportant scenery in On-Peninsula. The trail is in On-Peninsula. [See "Flower Garden" for declaration of this backdrop.] The Great Sea is in On-Peninsula. [See "Swank Waterfront" for declaration of this backdrop.] The tall grasses are in On-Peninsula. [See "Grassland Beach" for declaration of this backdrop.] Instead of going southeast from On-Peninsula when the coastline is altered (this is the another consequence of your meddling rule): say "Looks like you'd need a boat to get out to that lighthouse now." Section - Old Abandoned Lighthouse A proxy entrance called an old abandoned lighthouse is in On-Peninsula. The relevant direction of the old abandoned lighthouse is southeast. Chapter - Bottom of Lighthouse (Lighthouse1) [Note: This object made use of the I6 'general' attribute in the original code to cause the room description to be appended with a notice that player's amulet (if worn) gives off a purple flash. Here, this state tracking is done via the "scried" property of the water spirit.] A room called Bottom of Lighthouse is southeast of On-Peninsula. "You're inside an ancient lighthouse. The place must have been deserted quite a long time ago, and it is now a mess of broken stone, cobwebs and seabird droppings. The rest of the peninsula is back northwest.[paragraph break]You can see a hole above where a stairway probably entered an upper floor, but the stairway itself must have crumbled into dust long ago." A mess of broken stone and some droppings are unimportant scenery in Bottom of Lighthouse. Some cobwebs are an unimportant backdrop in Bottom of Lighthouse. Every turn when the location is Bottom of Lighthouse and the water spirit is unscried (this is the amulet flash if needed for Bottom of Lighthouse rule): signal proximity to an unholy artifact guarded by the water spirit. Instead of going up from Bottom of Lighthouse (this is the absent stairs can't be climbed rule): say "The hole is too far above you." Section - Absent Stairway An absent fixed in place thing called a stairway is in Bottom of Lighthouse. Understand "stairs" as the stairway. Chapter - Near Submerged Lighthouse (Lighthouse2) [Note that this room intentionally starts out unconnected to others; this is updated by the end of The Eruption scene. Also note that some of the logic attached to this object (concerning movement requiring/forbidding being in the boat) has been moved to the section for the "Navigable Waters" region and the "Small Sailboat" thing. Also note that the amulet flashing message has been intentionally separated from the room description. Finally, note that, in the original source code, this object made use of the I6 'general' attribute to track whether the amulet flashing message had been displayed here. Here, this state tracking is done via the "scried" property of the water spirit.] There is a room called Near Submerged Lighthouse. "You're on the outside of what looks like the upper part of a lighthouse, sticking straight out of the sea. The lighthouse is broken in many places, and several areas provide ledge-space to stand on. In fact, you could probably climb into the lighthouse through one of many large cracks in the walls to the east. The rest of Fublio Bay is back southwest." The lighthouse is in Near Submerged Lighthouse. [See "Grassland Beach" for declaration of this backdrop.] Some large cracks are unimportant scenery in Near Submerged Lighthouse. Instead of entering the large cracks (this is the treat entering cracks as entering the broken lighthouse rule): try entering the broken lighthouse. Every turn when the location is Near Submerged Lighthouse and the water spirit is unscried (this is the amulet flash if needed for Near Submerged Lighthouse rule): signal proximity to an unholy artifact guarded by the water spirit. Section - Broken Lighthouse A proxy entrance called a broken lighthouse is in Near Submerged Lighthouse. The relevant direction of the broken lighthouse is east. Chapter - On-Volcanic-Island (Volcano_island) [Note that some of the logic attached to this object (concerning movement requiring/forbidding being in the boat) has been moved to the section for the "Navigable Waters" region and the "Small Sailboat" thing.] There is a room called On-Volcanic-Island. "You're on the north shore of a small volcanic island in the middle of Fublio Bay. A little more shore lies to the south. The bay spreads out before you to the northwest." The printed name of On-Volcanic-Island is "On Volcanic Island". On-Volcanic-Island is in Fresh Vulcanism. The bay is in On-Volcanic-Island. [See "On-Fublio-Bay" for declaration of this backdrop.] The Great Sea is in On-Volcanic-Island. [See "Swank Waterfront" for declaration of this backdrop.] The shore is in On-Volcanic-Island. [See "Swank Waterfront" for declaration of this backdrop.] Chapter - South Part of Island (Island2) A room called South Part of Island is south of On-Volcanic-Island. "You're on a southern section of a small volcanic island in the middle of Fublio Bay. Most of the area here is lava rock, still warm. You can see a more open shore to the north." It is in Fresh Vulcanism. The bay is in On-Volcanic-Island. [See "On-Fublio-Bay" for declaration of this backdrop.] The Great Sea is in South Part of Island. [See "Swank Waterfront" for declaration of this backdrop.] The shore is in South Part of Island. [See "Swank Waterfront" for declaration of this backdrop.] Some lava rock is mass-nouned unimportant scenery in South Part of Island. Section - Old Shipwreck (shipwreck) [Note that, in the original source code, this object makes use of the I6 'general' attribute to track whether the green rod piece can be found by searching it. In this implementation, the more descriptive property "rod-bearing" is used.] An old shipwreck is in South Part of Island. "An old shipwreck is almost embedded in the lava here." The old shipwreck is fixed in place. The old shipwreck can be rod-bearing. The old shipwreck is not rod-bearing. The description of the old shipwreck is "It looks like an old navy vessel, stuck fast in the surrounding rock. It's obviously been underwater for some time, as it is covered in barnacles and seaweed. The hull has rotted apart in many places, and only a few jagged planks remain of the deck." Understand "ship" or "wreck" or "hull" or "deck" or "jagged" or "planks" or "plank" or "stump" or "mast" as the old shipwreck. Some barnacles are unimportant animal-like things that are part of the old shipwreck. Some seaweed is an unimportant mass-nouned vegetable-like thing that is part of the old shipwreck. Instead of entering the old shipwreck (this is the not a tourist attraction rule): say "You find that anything left to enter in the wreck has pretty much decayed away." After searching the old shipwreck when the old shipwreck is rod-bearing (this is the plot-critical items stay conveniently within this wreck rule): move the green rod piece to the location; now the old shipwreck is not rod-bearing; accomplish green-rod-recovery; say "Something about the old boat rings a familiar tune. You check the base of what might have once been a mast, and discover a familiar green rod." After casting fiznav at the old shipwreck (this is the fiznav is not strong enough to repair the shipwreck rule): say "You perform a ritual to the Sea Gods, and, magically, the ship attempts to repair itself. But there's too much damage, and not even the aid of the Sea Gods can fix this craft. The chant fails." Chapter - Lighthouse Upper Level (In_lighthouse) A room called Lighthouse Upper Level is up from Bottom of Lighthouse. "You're inside an abandoned lighthouse, on what must be an upper floor. The whole interior is lifeless and barren. There's a large broken crack in the western wall. You also notice a hole in the floor nearby, which might have been an exitway a long, long time ago." The printed name of Lighthouse Upper Level is "Lighthouse, upper level". A crack is unimportant scenery in Lighthouse Upper Level. An unimportant backdrop called a hole is in Lighthouse Upper Level. Instead of going west from Lighthouse Upper Level when the water spirit is at hand (this is the you can't escape your doom so simply rule): say "The spirit buffets you with water and prevents you from leaving." Instead of going down from Lighthouse Upper Level when the coastline is altered (this is the frying pan analogies seem both appropriate and inappropriate rule): say "You drop through the hole, and land in cold dark water. Trapped in an enclosed pool of seawater, with the hole out of reach above you, you drown shortly afterwards." After listening to Lighthouse Upper Level (this is the water sloshes rule): say "You hear some sloshing noises from below the floor." Section - Water Spirit (water_spirit) [Note that this thing makes use of the spirit kind, which did not exist in the original source code. See "New Kinds" for details.] There is a spirit called a water spirit. The description of the water spirit is "It looks like a large moving mass of seawater, in a somewhat man-like shape." Understand "animated" or "moving" or "water" or "seawater" or "man-like" or "shape" or "mass" or "mass of" as the water spirit. The killing blow description of the water spirit is "The water creature moves quickly, and smothers you in water! You try to escape, but the creature has amazing strength and weight. Water envelops your head, stinging as it forces itself into your nose and throat, and you drown...". The successful strong attack description of the water spirit is "The water spirit blasts you with a jet of seawater! It feels like a battering ram just used you for a practice drawbridge." The successful medium attack description of the water spirit is "The water spirit buffets you with small but intense jets of water. You feel exposed areas of skin getting torn raw by the force of it." The attack misses player description of the water spirit is "The water spirit forms into a small wave and tries to crush you, but you evade just in time!" The cumulative injuries kill the player description of the water spirit is "The last blow from the water spirit was too much for you, I'm afraid to say. You sink to the ground, too weak to defend yourself, as the spirit slowly oozes towards you for the final blow...". The successful hit by player description of the water spirit is "You strike the water creature, but your attack passes harmlessly through it. You hear a strange noise from the creature -- akin to a drowning man laughing." The miss by player description of the water spirit is "You attack the water spirit, but miss!" The reaction to spellcasting of the water spirit is "The creature makes a banshee howl, and a splash of seawater to the face garbles your chant." The banishment event description of the water spirit is "As you speak the chant, the water spirit falls back in fear! You finish the chant, and the water spirit makes one last attempt to smother you, but dissipates with a splash." Every turn when the gray rod piece is at hand and the gray rod piece had not been at hand (this is the summon water spirit to defend gray rod piece rule): move the water spirit to the location of the gray rod piece; say "Suddenly, water seeps in from the west, and forms into a large vaguely-humanoid shape before your very eyes!" The summon water spirit to defend gray rod piece rule is listed after the generic spirit attack rule in the every turn rulebook. [This prevents the water spirit from killing the player instantly upon arrival with a lucky roll.] Section - Gray Rod Piece (gray_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A fake rod called a gray rod piece is in Lighthouse Upper Level. "In the center of the room is a short gray rod." The color of the gray rod piece is "gray like murky water". Part - Gurth [GURTH.INF] Chapter - Gurth City Streets (GURTH_GUSStop) There is a room called Gurth City Streets. "A foggy sky covers the ever-busy city of Gurth. A road heads southeast into a larger portion of the city, and stairs lead down here." The GUS Stop stairway is in Gurth City Streets. [See "Entrance to Greater Anthar" for declaration of this backdrop.] The foggy sky is unimportant uniquely-named scenery in Gurth City Streets. An unimportant backdrop called a road is in Gurth City Streets. The circular sign is in Gurth City Streets. [See "Entrance to Greater Anthar" for declaration of this backdrop.] Section - Umbrella (umbrella) [Note that, in the original source code, this object has the I6 'openable' attribute, something that is not directly applicable to any thing in the I7 world, only containers. Fortunately, these properties can be brute-force applied (if you first declare that they can have the relevant properties) with a result similar to the original. Also note that this object made use of I6 'before' rules for the Open and Close actions to ensure the player was holding the umbrella directly before opening/closing it, change world model state, and print a message about the success or failure of the action. The same logic is applied here but split into check and after rules as appropriate; the open/closed world state change is handled by I7 standard rules. Finally, for extra realism, this thing has been modified from the original in that its size changes according to its open/closed state. The closed size is presumed to be the one used in the original. If changing the opened size, remember that it can't be larger than the size of the black pool without breaking the "temple slide" puzzle.] An umbrella is in Gurth City Streets. The umbrella can be openable. The umbrella is openable. The umbrella can be open. The umbrella has a number called closed size. The closed size of the umbrella is 16. The umbrella has a number called opened size. The opened size of the umbrella is 25. The description of the umbrella is "A[if the umbrella is open]n open[else] closed[end if] black-cloth umbrella." When play begins (this is the set umbrella size per the initial state rule): if the umbrella is open: now the size of the umbrella is the opened size of the umbrella; otherwise: now the size of the umbrella is the closed size of the umbrella. To indicate the need for physical possession of the umbrella during operation: say "You need to be holding the umbrella to do that." Check opening the umbrella when the player does not carry the umbrella (this is the can't open umbrellas from a distance rule): indicate the need for physical possession of the umbrella during operation; rule fails. Check closing the umbrella when the player does not carry the umbrella (this is the can't close umbrellas from a distance rule): indicate the need for physical possession of the umbrella during operation; rule fails. After opening the umbrella (this is the opening the umbrella is snappy rule): now the size of the umbrella is the opened size of the umbrella; say "You snap the umbrella open." After closing the umbrella (this is the closing the umbrella is snappy rule): now the size of the umbrella is the closed size of the umbrella; say "You snap the umbrella closed." Chapter - North District (GURTH_NDistrict) A room called North District is southeast of Gurth City Streets. "Probably the safest district in Gurth, the North District is mostly cobblestone roads and barricaded buildings. A main road heads south, or forks northwest and northeast." Some cobblestone roads, some barricaded buildings, and a main road are unimportant scenery in North District. The main road is uniquely-named. Chapter - Forest Edge (GURTH_Forest) [Note that an I6 'before' rule for this location was used to send messages about occasional thunder. This logic has been moved to an every turn rule associated with the storm (next section) in this implementation.] A room called Forest Edge is northeast of North District. "Dark forest meets dark city outskirts here. The only exit is along an old path to the southwest -- the forest is too thick for travel otherwise. Rain falls periodically from a leaden, stormy sky." The forest trees are in Forest Edge. [See "Forest Clearing" for declaration of this backdrop.] The path is in Forest Edge. [See "Forest Garden" for declaration of this backdrop.] A mass-nouned thing called some rain is unimportant scenery in Forest Edge. After listening to Forest Edge when the treant is at hand (this is the what ho someone in trouble rule): say "You hear muffled cries for help from somewhere inside the log cabin!" Section - Storm (storm1) A storm is scenery in Forest Edge. The description of the storm is "It does look a bit stormy overhead." Understand "dark" or "stormy" or "sky" or "clouds" or "weather" as the storm. Every turn when the player can see the storm (this is the it was a dark and stormy night rule): if a random chance of 3 in 10 succeeds: say "A rumble of thunder booms overhead." Instead of casting shazok when the player can see the storm (this is the reroute untargeted shazok to storm rule): try casting shazok at the storm instead. After casting shazok at the storm (this is the playing with lightning is dangerous rule): say "As you finish your chant, a bolt of lightning rips down from the clouds overhead! [run paragraph on]"; if the angry treant is at hand: say "It strikes the treant, and several of the creature's top branches catch fire. Howling in pain, the creature runs off into the woods and disappears."; save the woodsman; otherwise: say "It courses through you, frying you to a crisp."; end the game in death. Section - Angry Treant (Treant) A vegetable-like animal called an angry treant is in Forest Edge. The description of the angry treant is "Treants are basically animated trees. They are considered mythical creatures, usually solitary and quite rare. This particular treant looks similar to a great elm tree. You notice that it seems covered with spots of some sort of blight." Understand "blighted" or "animated" or "tree" or "great" or "elm" as the angry treant. Some unimportant vegetable-like things called some giant leafy arms are part of the angry treant. Understand "two" or "branches" or "massive" or "limbs" as the giant leafy arms. Every turn when the angry treant is at hand and the log cabin is at hand (this is the apparently the treant likes an audience for his acts of destruction rule): if a random chance of 1 in 2 succeeds: increment the damage level of the log cabin; if the log cabin is collapsed: remove the angry treant from play; say "The treant's continuous bludgeoning proves too much for the cabin, and it collapses into splinters! With a roar of vengeful glee, the treant plucks a hapless woodsman from the wreckage and stalks off into the forest with his victim."; else: say "The treat hammers on the house, and you hear a [bold type]crack[roman type]! The cabin is not faring well."; else: say "The treant angrily clubs the wooden cabin, which shakes under the repeated blows." Instead of casting shazok at the angry treant when the player can see the storm (this is the reroute shazok against treant to storm when storm is near rule): try casting shazok at the storm instead. After casting taclor at the angry treant (this is the there's a fine line between physician and landscaper rule): say "The treant seems to turn a shade of deep green, and the patches of blight disappear! The ancient tree creature pauses, regards you solemnly, and then walks off into the forest."; save the woodsman. After casting egdelp at the angry treant (this is the its problem is too many whacks not lack of wax rule): say "The treant is covered with a waxy buildup, which immediately starts to wash off in the rain. Already rather incensed, it now turns its attention to you and mauls you with two giant, leafy arms."; end the game in death. After casting throck at the angry treant (this is the bigger tree does not equal happier tree rule): say "The treant grows a bit bigger. His current bad mood seems to increase proportionately! He turns his attentions to you and pounds you flat with two massive limbs."; end the game in death. Section - Spots of Blight [Note that these do not have a separate existence as their own object in the original source code.] Some spots of blight are vegetable-like things part of the angry treant. The description of the spots of blight is "Patches of mottled yellow, orange, and black. It doesn't look healthy at all." Understand "patches" or "mottled" or "yellow" or "orange" or "black" as the spots of blight. Section - Log Cabin (WOOD_House) [Note that this object made use of the I6 'general' attribute to track whether the player had cast the egdelp spell on it. The more descriptive condition "waxy" is used in this implementation to similar effect. Also note that this object had a property called 'number' which was used to track the extent of the damage inflicted on it by the treant. A more descriptive property "damage level" is used in this implementation.] A fixed in place thing called a log cabin is in Forest Edge. The log cabin can be waxy. The log cabin can be whole, slightly damaged, somewhat damaged, severely damaged, and collapsed (this is its damage level property). The description of the log cabin is "A small house built of logs[if the log cabin is slightly damaged]. It looks slightly damaged[else if the log cabin is somewhat damaged]. It looks partially damaged, the roof logs are broken in several places[else if the log cabin is severely damaged]. It looks very damaged. One wall is nearly broken through[else if the log cabin is collapsed] that has collapsed into little more than a pile of broken logs[else] and bugs[end if][if the log cabin is waxy] You notice some portions with spots of wax on them." Instead of entering the log cabin when the angry treant is at hand (this is the excuse me buddy just want to get past here rule): say "The angry treant seems to be in the way." Instead of entering the log cabin (this is the hope you weren't waiting long to get inside rule): say "It's just a tiny log cabin that probably has nothing interesting inside." After casting egdelp at the log cabin (this is the did you plan to polish the whole thing rule): now the cabin is waxy; say "The outside of the cabin is now covered with spots of waxy buildup." To save the woodsman: remove the angry treant from play; now the player carries the red sphere; say "[line break]Moments later, a woodsman appears from the battered log cabin. 'Much thanks, sir,' he says. 'Appears I mistook that treant for a dead tree and tried to cut it down. Can't say he took it too well.' he says sheepishly.[paragraph break]'Say, you don't look like you're from around these parts. Kinda like this funny thing I found in the woods the other day.' He hands you a strange round object. 'Maybe you know what to do with it?'[paragraph break]He hefts a small hatchet over his shoulder. 'Well, back to do a little logging,' he says, as he walks off into the deep forest, whistling." Section - Red Sphere (red_sphere) There is a sphere called a red sphere. The color of the red sphere is "red". Chapter - Market District (GURTH_MDistrict) [Note that the original version of this object made use of the I6 'general' attribute to track whether a coin had been dropped in the area via an I6 'each_turn' routine attached to it. In this case, I7's default state memory is not effective to determine the state (partly because this implementation uses undifferentiated coin objects), so the more descriptive property 'coin-lucky' is used. Also note that the I6 'e_to' and 'w_to' message strings are replaced with Instead rules, and the room is given self-connections in those directions to simplify the associated rule definitions.] A room called Market District is south of North District. "The famous Gurth Market District is as noisy, crowded, and dangerous as it ever was. A cobblestone road heads north and south here." The Market District can be coin-lucky. A cobblestone road is unimportant scenery in Market District. East of Market District is Market District. West of Market District is Market District. Instead of going east from Market District (this is the cockney bit characters are a must rule): say "'Get out [']o me way!' some rude fellow says as you try to pass." Instead of going west from Market District (this is the old crones are also de rigeur rule): say "'No push[']n, no shov[']n!' an old hag screams at you, and promptly shoves you back." Every turn when the player is in Market District and Market District is not coin-lucky (this is the throw the player a bone er I mean coin rule): if a random chance of 4 in 10 succeeds: now a random uncirculated coin is in Market District; now Market District is coin-lucky; say "A clumsy hawker stumbles into you as he crosses the street, hustling off without so much as an apology. You notice he dropped something in his hurry." Chapter - South District (GURTH_SDistrict) [Also note that the I6 's_to' and 'w_to' message strings are replaced with Instead rules, and the room is given self-connections in those directions to simplify the associated rule definitions.] A room called South District is south of Market District. "The generally gloomy atmosphere is more noticeable than ever here, in the extremely dangerous South District. The area is filled with boarded-up houses, and a few shifty-eyed characters are the only people milling about here. A road leads north. In the distance to the east is an abandoned flat, probably in better shape than the rest." Some boarded-up houses and an abandoned flat are unimportant scenery in South District. The road is in South District. [See "Gurth City Streets" for declaration of this backdrop.] South from South District is South District. West from South District is South District. [Note that no equivalent object exists in the original source code; the words "characters" and "people" were instead synonyms of the location. Since this implementation calls for such pseudo-objects to be real things, this particular thing is made into a person so the normal responses associated with living things are available.] Some shifty-eyed characters are people in South District. The shifty-eyed characters are scenery. [Note that the original source code's equivalent routines for these rules picked a random number between 1 and 20 and triggered the player death if the value was 5. These should be logically equivalent.] Instead of going south from South District (this is the thugs are dangerous rule): if a random chance of 1 in 20 succeeds: say "You wander down a back alleyway, and are immediately assaulted by a group of vicious thugs, who batter you senseless."; end the game in death; otherwise: say "You wander down an alleyway, find a dead-end, and return here." Instead of going west from South District (this is the that goes double for vengeful thugs rule): if a random chance of 1 in 20 succeeds: say "You wander down a side street, and are immediately assaulted by a group of vicious thugs. One of them seems to recognize you. 'That's the Preacher-man who got Davey arrested! Let's show [']em what we think o['] that!' They proceed to beat you senseless."; end the game in death; otherwise: say "You wander down a side street, find a dead-end, and return here." Chapter - Front of House (GURTH_House) [Note that the I6 in_to property of this object in the original is not translated directly here; attempts to go "in" will be intercepted by the small flat proxy entrance.] A room called Front of House is east of South District. "You're standing at the rotting front steps of a small flat. The front door to the east has been battered down, and you could probably walk right in. Alternatively, you can return to the street to the west." Some rotting front steps are unimportant scenery in Front of House. The street is in Front of House. [See "GUE Entrance" for declaration of this backdrop.] A proxy entrance called a small flat is in Front of House. The relevant direction of the small flat is east. Chapter - Near Construction Site (GURTH_House2) [Note that, although other time-travel sequences use the same locations in this implementation, there seems to be enough of a difference between the in-construction and present-day versions of the "Front of House" location to warrant treating them as separate rooms.] There is a room called Near Construction Site. "You're standing near a small construction site. A city street lies west, and a construction ditch is east." The printed name of Near Construction Site is "Front of House". Near Construction Site has some text called internal name. The internal name of Near Construction Site is "Front of House (in the past)". The street is in Near Construction Site. [See "GUE Entrance" for declaration of this backdrop.] A ditch is an unimportant backdrop in Near Construction Site. Instead of going west from Near Construction Site (this is the time traveling is just full of hazards rule): say "You step into the street, and several locals give you strange looks. The surrounding neighborhood seems new and busy -- various construction sites mark the work of enterprising shop-keepers of the area.[paragraph break]'Watch out there!' someone cries. A sudden pile of bricks falls from a nearby scaffolding, and crushes you."; end the game in death. Section - Small Construction Site A proxy entrance called a small construction site is in Near Construction Site. The relevant direction of the small construction site is east. Section - Dusty Brick (bad_brick) [Note that much of the logic attached to this object in the original source code has been moved to the "Planting the Brown Rod Piece scene. See that section.] A dusty brick is in Near Construction Site. "An old discarded brick lies nearby." The description of the dusty brick is "An old brick, slightly cracked in several places." The size of the dusty brick is 15. Understand "old" or "discarded" or "cracked" as the dusty brick. Chapter - Construction Site (Construction_site) A room called Construction Site is east of Near Construction Site. "This is a long square ditch that is likely to be the starting point for some building. It is framed by wooden slats and short brick walls. The only way out is to the west." Some wooden slats are unimportant scenery in Construction Site. The ditch is in Construction Site. [See "Near Construction Site" for declaration of this backdrop.] Understand "wood" as the wooden slats. Section - Thick Brick (good_brick) A thick brick is in Construction Site. "A thick brick lies nearby." The description of the thick brick is "A thick brick, solid as a rock." The size of the thick brick is 15. Understand "solid" as the thick brick. Section - Portion of Wall (foundation_wall) [Note that, in the original source code, this object made use of a 'number' property to track state relevant to the brown rod recovery puzzle. It started at 0, and, depending what happened when the player visited it in the past, would be set to 1 if the wall was finished with the good brick and 2 if it was finished with the bad brick. These states are implemented here with the more descriptive labels "unfinished," "finished well," and "finished poorly." Also note that some of the logic associated with this object has been moved to rules for the "Planting the Brown Rod Piece" scene. Also note that this object use the same logic in its I6 Before() rule for both the I6 Search action and I6 LetGo fake action. The corresponding logic is handled here with a rule for the taking action, due to the operation of the 6G60 Standard Rule "convert remove to take".] A fixed in place open container called a portion of wall is in Construction Site. "You notice a foundation side wall in the ditch." The portion of wall can be unfinished, finished poorly, or finished well. The description of the portion of wall is "[if the portion of wall is unfinished]It looks somewhat unfinished. Part of it is not yet filled in, leaving a dark recess in the side of the ditch[else if the portion of wall is finished well]The wall is a finished work of brick and mortar. It looks quite strong[else]The wall is a finished work of brick and mortar. You see a spot where the brickwork seems a bit lower in quality[end if]." The size of the portion of wall is 15. Understand "dark" or "recess" or "hole" as the portion of wall when the portion of wall is unfinished. Understand "brick" or "mortar" or "brickwork" as the portion of wall when the portion of wall is finished. Definition: The portion of wall is finished if it is not unfinished. Rule for deciding the concealed possessions of the portion of wall (this is the it's not a transparent brick rule): if the portion of wall is finished, yes; no. [examining an open container with this rule still shows contents] To indicate that the wall is now sealed: say "The wall is currently sealed shut." Instead of inserting something into the portion of wall when the portion of wall is finished (this is the it's only a container for the programmer's convenience rule): indicate that the wall is now sealed. Instead of searching the finished portion of wall (this is the containers have many auxiliary behaviors to deal with rule): indicate that the wall is now sealed. Instead of taking something when the noun is in the finished portion of wall (this is the can't take from sealed wall rule): indicate that the wall is now sealed. [can't actually trigger this rule in normal gameplay] After inserting something into the portion of wall (this is the mask the fact that the hole is not implemented separately rule): say "You put [the noun] into the small hole in the wall." Instead of attacking the unfinished portion of wall (this is the petty vandalism rarely pays rule): say "You kick at the wall. Unfortunately, it wasn't all that stable, and the wall falls apart, burying you under a pile of loose bricks."; end the game in death. Instead of attacking the portion of wall when the portion of wall is finished well (this is the I guess the protagonist is not a karate expert rule): remove foundation from play; say "You try to break the wall, but only end up hurting your hand." After attacking the portion of wall when the portion of wall is finished poorly (this is the you say temporal paradox I say puzzle solution rule): now the foundation is primed for search; ["future" version of this object in game world] say "You knock on the weak portion of the wall, and produce a slight crack, that no doubt will cause the homeowners some worry in the future." Chapter - Entrance Room (House_Ent) A room called Entrance Room is east of Front of House. "A bare room, with peeling paint and rotting, water-stained walls. There's a room to the east, and a rickety stairway down. The outdoors lie west." Outside from Entrance Room is Front of House. Some peeling paint and a rickety stairway are unimportant scenery in Entrance Room. The peeling paint is mass-nouned. An unimportant scenery thing called the outdoors is in Entrance Room. Chapter - Basement (House_Basement) A dark room called Basement is down from Entrance Room. "A musty, smelly basement. Stairs head up." An unimportant backdrop called some stairs is in Basement. After smelling Basement (this is the you smell nothing unexpected so long as you expected musty rule): say "It smells musty down here, as though the place has been unused for quite some time." Section - Dusty Metal Box (House_switchbox) A linewriter-abusing fixed in place closed openable container called a dusty metal box is in Basement. "There's a[if the dusty metal box is open]n open[else] dusty[end if] metal box attached to the wall here.[if the dusty metal box is open and the dusty metal box is empty] It seems to be empty.[line break][else if the dusty metal box is open and the dusty metal box is not empty] It contains:[paragraph break][Spiritwrak-style contents list for the dusty metal box][else][line break][end if]". The description of the dusty metal box is "A dusty metal box, attached to the wall." The size of the dusty metal box is 10. The carrying capacity of the dusty metal box is 3. [Note that the original source code prohibited opening, pushing, pulling, turning, or touching the dusty metal box. This implementation extends the rule to all direct (i.e. one noun, not two) actions requiring the ability to touch the box.] Instead of doing something to the dusty metal box when the action requires a touchable noun and the zombie is at hand (this is the it seems this zombie was once an electrical inspector rule): say "Slowly, but quite deliberately, the zombie prevents you from getting near the box." Section - Thin Wire (wire) [Note that, in the original source code, this object made use of the I6 'general' attribute in a way that suggests it was intended to indicate whether the wire was still conducting high-voltage current. As an experiment, a phrase that decides truth states is used here instead to prevent nonsensical electrocution when the wire is not in its initial state.] A thin wire is in the dusty metal box. The description of the thin wire is "A thin, stiff string of metal." The size of the thin wire is 1. To arbitrarily disallow plane-shifting the wire: say "[one of]You sense a brief debate among the gods about what to do. While some believe you should be rewarded for creative thinking, the majority feel it would be better in this instance if [or]You sense a brief huddle of the gods. Their verdict remains the same, and [stopping]your chant goes unanswered." After casting huncho at the thin wire while the circuit was live (this is the disallow ascension to obtain wire rule): arbitrarily disallow plane-shifting the wire. After casting luncho at the thin wire while the circuit was live (this is the disallow damnation to obtain wire rule): arbitrarily disallow plane-shifting the wire. To decide whether the circuit was live: if the thin wire was in the dusty metal box and the thin wire was not handled: decide yes; otherwise: decide no. Instead of taking or pushing or pulling or touching or rubbing or squeezing the thin wire while the circuit was live and the player does not wear the rubber gloves (this is the playing with high voltage stuff requires protective gloves rule): say "As your fingers get near the wire, a bright spark of electricity [run paragraph on]"; if a random chance of 3 in 10 succeeds: say "arcs into your hand! The results are quite shocking, I'm afraid."; now the zombie is in Basement; end the game in death; otherwise: say "arcs near your fingers! You pull back just in time." After pushing or pulling or touching or rubbing or squeezing the thin wire while the circuit was live and the player wears the rubber gloves (this is the do not taunt the electricity rule): say "As you touch the wire, you notice a bright spark! Good thing you were wearing rubber gloves!" After taking the thin wire while the circuit was live and the player wears the rubber gloves (this is the bend it like Bob Villa rule): say "With a firm tug and a popping of bright blue sparks, you pull the wire loose." Section - Foundation (foundation) [Note that, in the original source code, this object made use of the I6 'general' attribute to track when it had been primed for a later search by the player, i.e. finished poorly and then damaged. This implementation uses the more descriptive condition property "primed for search". Also note that the logic associated with searching it has been revised slightly to ensure that points are awarded only if the brown rod piece is recovered.] A foundation is fixed in place in Basement. "A large break in the wall exposes a good portion of the house's foundation." The foundation can be primed for search. The description of the foundation is "Water damage, or simply age, has exposed a large hole in one of the walls, through which you can see exposed wood and brick, part of the foundation of the house." Understand "large" or "break" or "hole" or "exposed" or "wood" or "brick" or "wood and brick" or "water damage" or "damage" or "wall" or "break in the wall" as the foundation. Instead of inserting something into the foundation (this is the in this era the foundation is not a container rule): say "No need to put things in the foundation like that." After searching the foundation when the foundation is not primed for search (this is the hey man it's just a regular boring decaying foundation as far as you know rule): say "You briefly search the decaying foundation, but find nothing." After searching the foundation when the foundation is primed for search (this is the paradoxical foreknowledge rule): say "You dig around in a familiar spot in the hole "; now the foundation is not primed for search; if the portion of wall is empty: say "but find nothing."; otherwise: if the portion of wall contains the brown rod piece: accomplish brown-rod-recovery; say "and [a list of things in the portion of wall] spill[if the portion of wall contains exactly one thing]s[end if] to the ground!"; now every thing in the portion of wall is in Basement. Section - Gray Scroll (gray_scroll) A scroll called a gray scroll is in Basement. The gray scroll is inscribed with tossio. Section - Frightening Zombie (GHOST) [Note that, in the original source code, this object made use of the 'animate' property but not the 'female' or 'neuter' properties, which meant in I6 that 'male' was set by default. Thus, this implementation uses the I7 'man' kind. Although it is not specified in the zombie's description, it seems as though this gender was intended by Mr. Yu.] There is a man called a frightening zombie in Basement. The description of the frightening zombie is "A frightening, gaunt member of the living dead, with pale skin, and even paler eyes." Understand "gaunt" or "dead" or "living dead" or "member" or "of the living dead" as the frightening zombie. Some pale skin is an unimportant mass-nouned animal-like thing part of the frightening zombie. Some pale eyes are unimportant animal-like things part of the frightening zombie. Instead of casting wigro when the frightening zombie is at hand (this is the reroute untargeted wigro to zombie when it is present rule): try casting wigro at the frightening zombie instead. Instead of throwing the vial of holy water at the frightening zombie (this is the holy water versus shotgun versus chainsaw it's really a question of style rule): [can't be after rule due to generic life rule interference] remove the vial of holy water from play; remove the frightening zombie from play; say "The vial breaks into shards, scattering holy water all over the zombie. The zombie shrieks, and crumbles into dust." Instead of giving the rubber gloves to the frightening zombie (this is the zombie electrician at your service rule): now the dusty metal box is open; now the wire is in Basement; now the rubber gloves are in Basement; remove the frightening zombie from play; say "The zombie seems to regard the gloves, and slowly puts them on. It proceeds to[if the dusty metal box was closed] open[end if] the metal box and remove[if the dusty metal box was open]s[end if] a loose wire, producing a few sparks in the process. Finally, it places the loose wire on the floor, satisfied.[paragraph break]It slowly crumbles into dust, but you just manage to hear, 'Thanks, I've been trying to get rid of that wire for ages,' in the faintest of whispers." Instead of attacking the frightening zombie (this is the it's one of those new-fangled damage-resistant zombies rule): say "Your attack knocks it back, but it seems completely unharmed, somehow!" This is the zombie default life behavior rule: say "Zombies are usually not very responsive to those among the living. This one is no exception." Instead of doing something when the current action is generic life behavior and the current action involves the frightening zombie (this is the frightening zombie generic life rule): abide by the zombie default life behavior rule. Persuasion rule for asking the zombie to try doing something (this is the reroute understood orders to zombie to generic life response rule): consider the zombie default life behavior rule; rule fails. After casting wigro at the frightening zombie (this is the was it really that frightening rule): remove the frightening zombie from play; say "As you complete the chant, the zombie crumbles into dust, turned." Chapter - Kitchen (House_Kitchen) A room called Kitchen is east of Entrance Room. "You're in the kitchen, by the looks of things. Some broken cabinets are on the wall. Light from partially boarded-up windows lets you see the rotting wooden floor. Rooms lie to the north and west." Some broken cabinets, some boarded-up windows, and a rotting wooden floor are unimportant scenery in Kitchen. Section - GUE-Automatic Oven (OVEN) [Note that this object originally made use of the I6 when_closed and when_open properties which do not have a corresponding feature in I7; this implementation uses a variable initial appearance property as seen with most other objects. As with the alarm clock, objects which were brought into scope via an I6 add_to_scope property in this object are instead made part of the GUE-Automatic oven in this implementation due to changes in the default rules for concealment.] A fixed in place closed openable container called a GUE-Automatic oven is in Kitchen. "Inexplicably untouched and undamaged, a GUE-Automatic oven is sitting[if the GUE-Automatic oven is closed] closed[else] open[end if] in a corner of the room.[if the GUE-Automatic oven is open and the GUE-Automatic oven is empty] It seems to be empty.[else if the GUE-Automatic oven is open] It contains:[line break][Spiritwrak-style contents list for the GUE-Automatic oven][end if]". The description of the GUE-Automatic oven is "A FrobozzCo best-seller -- this small green oven is perfect for those adventurers who want a home-cooked meal, but are short on time and space. There are a dial and a button on the top." The size of the GUE-Automatic oven is 15. Understand "stove" as the oven. [Technically, it's not a stove, and the original version doesn't support this, but in a world with no stove to compete with, there's no downside and some players might appreciate it.] After opening the GUE-Automatic oven when the GUE-Automatic oven is empty (this is the notify player when revealing nothing in the oven rule): say "You open the oven, which is empty." After opening the GUE-Automatic oven when the GUE-Automatic oven is not empty (this is the notify player when revealing something in the oven rule): say "You open the oven, revealing:[line break][Spiritwrak-style contents list for the GUE-Automatic oven]". Check setting the oven to something (this is the interpret setting the oven as setting its dial rule): try setting the round dial to the topic understood instead. Section - Round Dial (oven_dial) [Note that, in the original source code, this object had a before rule to prevent the player from using the I6 SetTo action. This implementation allows the I7 version of the action ("setting it to") when an oven setting is specified, so no equivalent rule is implemented here.] A dial called a round dial is part of the GUE-Automatic oven. The round dial has an oven setting called cooking mode. The cooking mode of the round dial is Roast Chicken. The description of the round dial is "A round dial with small printed words. A line on the oventop marks the currently active dial setting, which at the moment is '[cooking mode of the round dial]'." Understand "oven dial" as the round dial. The printed name of the round dial is "oven dial". Some small printed words are part of the round dial. The description of the small printed words is "The settings, from lowest to highest, are [list of oven settings]." Carry out turning the round dial (this is the turning the oven dial rotates mode by one rule): now the cooking mode of the round dial is the oven setting after the cooking mode of the round dial. After turning the round dial (this is the report new setting after turning the oven dial rule): say "The line is now pointing to '[cooking mode of the round dial]' on the dial." Check setting the round dial to something (this is the oven dial can only be set to oven settings rule): if cooking mode detected is false: say "The dial does not appear to have such a setting."; stop the action. Check setting the round dial to something (this is the oven is already set to that mode rule): if cooking mode detected is true and the intended cooking mode is the cooking mode of the round dial: say "Your hand stops halfway to the dial; it's already set to '[cooking mode of the round dial]'."; stop the action. Carry out setting the round dial to something (this is the set cooking mode to named setting rule): if cooking mode detected is true: [ say "(DEBUG: setting dial to [the oven setting understood]) ";] now the cooking mode of the round dial is the intended cooking mode. After setting the round dial to something (this is the save the player a few turns rule): if cooking mode detected is true: say "You spin the dial until the line points to '[cooking mode of the round dial]'." Section - Black Button (oven_button) [Note that this object is defined in the original with a property called 'number', but it does not seem to be used in any way by the original source code, so an equivalent is omitted here.] A thing called a black button is part of the GUE-Automatic oven. The description of the black button is "A small round black button on the top of the oven." Understand "oven button" as the black button. The printed name of the black button is "oven button". After pushing the black button when the GUE-Automatic oven is open (this is the FrobozzCo has reluctantly installed this safety feature rule): say "There is an irritated buzz." After pushing the black button when the GUE-Automatic oven is closed (this is the automatic oven cooks automatically rule): say "You press the button and hear a low spinning noise. "; if the cooking mode of the round dial is Thermonuclear Flash: now everything in the GUE-Automatic oven is off-stage; if the enpanned cake is enclosed by the GUE-Automatic oven and the baking level of the cake is underdone and the cooking mode of the round dial is Baked Goods: [allow underdone cakes to be cooked to done, per original] now the baking level of the cake is done; if enpanned dough is enclosed by the GUE-Automatic oven: [note enclosed by vs. in, since dough will be in pan] bake the cake; say "Suddenly, the oven makes a[if cooking mode of the round dial is Thermonuclear Flash] tremendous [']bang['][else] loud [']pop['][end if], and nearly springs off the floor! [if cooking mode of the round dial is Thermonuclear Flash]A bright flash of light seems to originate from somewhere inside the oven! [end if]Then, just as suddenly, everything is quiet again." To bake the cake: transmogrify dough into cake; set cake doneness from oven temperature; set cake foldedness from dough. To transmogrify dough into cake: remove the dough from play; now the cake is in the baking pan; To set cake doneness from oven temperature: if the cooking mode of the round dial is less than Baked Goods: now the baking level of the cake is underdone; otherwise if the cooking mode of the round dial is greater than Baked Goods: now the baking level of the cake is overdone; otherwise: now the baking level of the cake is done; To set cake foldedness from dough: if the fold count of the dough is less than 83: now the folding level of the cake is underfolded; otherwise if the fold count of the dough is greater than 83: now the folding level of the cake is overfolded; otherwise: now the folding level of the cake is properly folded. Chapter - Pantry (House_Pantry) A room called Pantry is north of Kitchen. "This was once probably a pantry of some sort. It's now a bare, closet-sized room. The exit is south." Section - Baking Pan (Baking_Pan) [Note that this implementation adds several rules with no equivalent in the original source code, as niceties for the player and to limit the ability to try to be messy with the dough. Also note that this object is given an initial appearance property not found in the original. See the section below called "Sticker" (pan_sticker) for more information.] An open container called a baking pan is in Pantry. The initial appearance of the baking pan is "A brand-new baking pan lies discarded in one corner. There's a sticker stuck to the inside of the pan." The description of the baking pan is "It's a nice, round, flat-bottomed ceramic pan." The carrying capacity of the baking pan is 20. The size of the baking pan is 14. Understand "ingredients" as the baking pan when something messy is in the baking pan. Definition: a thing is enpanned if it is in the baking pan. Instead of mixing the baking pan when the baking pan is empty (this is the can't mix air yo rule): say "There doesn't seem to be anything in the pan to mix." Instead of mixing the baking pan when the cake is in the pan (this is the can't mix the cake either rule): say "You can't mix anything with the already-baked cake in the pan." Instead of mixing the baking pan when only the dough is in the baking pan (this is the can't mix dough unless adding something rule): say "You need to add something to the pan if you want to mix something new into the dough." Instead of mixing the baking pan when no edible thing is in the baking pan (this is the can't make dough out of non-food rule): say "Betty Crocker you are not. You can't make dough out of [a list of things in the baking pan]!" To decide if the necessary and sufficient ingredients for dough are in place: if the sack of flour is in the baking pan and (the stick of butter is in the baking pan or the corbie egg is in the baking pan): decide yes; otherwise: decide no. After mixing the pan when not the necessary and sufficient ingredients for dough are in place (this is the don't have enough core ingredients to make dough rule): say "You mix the contents of the pan around a bit, but some things don't quite coagulate, and the contents remain unmixed." After mixing the pan when the dough is not in the baking pan and the necessary and sufficient ingredients for dough are in place (this is the mixing core dough ingredients makes dough rule): now everything in the baking pan is part of the dough; now the dough is in the baking pan; say "You start mixing. Like magic, in short time you have a doughy mixture in the pan." Definition: A thing is undoughy if it is not the dough. After mixing the pan when the dough is in the baking pan and something edible that is not the dough is in the baking pan (this is the mixing things with the dough mixes them into the dough rule): [ say "(new ingredients = [the list of everything in the baking pan that is not the dough])";] now every undoughy thing in the baking pan is part of the dough; say "You mix the new ingredients into the dough." Definition: A thing is spatula-requiring if it is the dough or it is the cake. Instead of taking a spatula-requiring thing that is in the baking pan (this is the too bad no Frobozz Magic Spatula exists here rule): say "[The noun] is stuck fast in the pan, and you can't get it out." [this rule covers the I6 Before() rule for the LetGo fake action.] Definition: A thing is cake-worthy if it is listed in {the sack of flour, the stick of butter, the corbie egg, the dornberries, the sugar cube, the packet of baking powder}. Definition: A thing is messy if (it is cake-worthy and it is enpanned) or it is the dough. Instead of taking a messy thing (this is the just make the damn cake rule): say "[if the noun is plural-named]They're[else]It's[end if] somewhat scattered about in the pan right now, and you can't quite remove [object pronoun of the noun] cleanly." Instead of inserting something into the baking pan when the cake is in the baking pan (this is the can't add things to baked cake rule): say "The cake takes up the entire space in the pan." Instead of inserting something that is not cake-worthy into the baking pan when something messy is in the baking pan (this is the limit ability to cause trouble with messy things rule): say "You'd better not. [The noun] would get all messy." Instead of mixing something messy (this is the interpret mixing messy ingredients as mixing the pan rule): try mixing the pan instead. Instead of taking something that is not messy when the noun is in the baking pan and something messy is in the baking pan (this is the messes spread rule): say "[The noun] is too much of a mess to carry around now." Section - Sticker (pan_sticker) [Note that, in the original source code, this object was specified as being a child of the Baking_Pan object. Since Baking_Pan is given the container attribute, in the I6 world, this effectively made it "in" the pan. The original object's initial appearance property (which cannot be observed by someone playing the actual game) indicates it is "stuck to the bottom of the pan", but it's ambiguous about whether this is the bottom of the inside of the pan (where it would interfere with baking) or the bottom of the outside of the pan (where it would not). This distinction is relevant in I7, since it could be set up as part of the pan without being in it, but doing so would involve some extra handling of attempts to remove it. Since it's easier both to write it and to justify it as being inside the pan (this author has seen plenty of new pans with stickers so placed), that's the choice taken here. In addition: Since a more complex implementation of stickers would serve no function, this object is modified slightly to make it clear that sticking it to things will not be productive. Since the sticker's initial appearance property can't be observed, this text is moved to the initial appearance of the baking pan. (See above.)] A sticker is in the baking pan. It is privately-named. The sticker can be unstuck or stuck. The printed name of the sticker is "[if unstuck]sheet of instructions[else]sticker[end if]". The description of the sticker is "The [sticker] reads:[paragraph break][fixed letter spacing][6 spaces]Frobozz Magic Baking Pan[paragraph break][11 spaces]HELLO, BAKER![paragraph break][4 spaces]To mix ingredients placed in[line break][4 spaces]pan, simply say [']MIX PAN['].[paragraph break][4 spaces]Baked goods should be removed [line break][4 spaces]with a Frobozz Magic Spatula.[variable letter spacing]". The size of the sticker is 5. Understand "sticker" as the sticker when the sticker is stuck. Understand "instruction" or "instructions" or "sheet" or "sheet of" as the sticker when the sticker is unstuck. After taking the sticker when the sticker was in the baking pan and the sticker is stuck (this is the destickify sticker after removal rule): now the sticker is unstuck; now the sticker is papery; say "The sticker peels easily from the pan, leaving a clean surface. There is a slight hiss as the Frobozz Magic Adhesive evaporates, transforming the sticker into a Frobozz Magic Instruction Sheet for the baking pan." Section - Lump of Dough (dough) There is an edible thing called a lump of dough. The lump of dough has a number called fold count. The description of the lump of dough is "It looks like a typical, beige lump of uncooked dough." The size of the lump of dough is 14. Rule for deciding the concealed possessions of the dough (this is the dough ingredients are no longer directly accessible rule): decide yes. To carefully fold the dough (N - a number) times: increase the fold count of the dough by N; if the fold count of the dough is greater than 500, now the fold count of the dough is 500. [IMPDO - make non-core ingredients visible as part of dough description?] After eating the lump of dough (this is the you must have been thinking of cookie dough rule): say "Ugg. Raw dough." Instead of mixing the dough when the dough is enpanned (this is the interpret mixing the dough as mixing the pan rule): try mixing the baking pan instead. Instead of inserting something into the dough when the dough is enpanned (this is the interpret putting things into the dough as putting them into the pan rule): try inserting the noun into the baking pan instead. After folding the dough (this is the it's possible to bake without magic rule): carefully fold the dough one times; say "You roll up your sleeves and start kneading. The dough "; if the fold count of the dough is less than 50: say "folds easily."; otherwise if the fold count of the dough is greater than 200: say "has the consistency of a soft rock."; otherwise: say "is pliable." After casting gloth at the dough (this is the gloth does just what it says on the tin rule): carefully fold the dough 83 times; say "As you speak the chant, the dough seems to twinkle! With a sudden puff of flour, the dough spins and neatly kneads itself many times." Section - Cake (cake) There is an edible thing called a cake. The cake has a doneness called baking level. The cake has a foldedness called folding level. The description of the cake is "It's a[if the baking level of the cake is underdone] somewhat raw-looking[else] nice-looking[end if] cake[if the baking level of the cake is overdone], except that it looks a little burned[end if]." The size of the cake is 14. After eating the cake (this is the well not the whole cake anyway rule): say "Not bad. Unfortunately, it looks like you can't have your cake and eat it too." After tasting the cake (this is the it's fun to be pedantic rule): say "You taste a tiny bit of the cake. [run paragraph on]"; if the baking level of the cake is not done and the folding level of the cake is not properly folded: say "It tastes a [if the baking level of the cake is underdone]bit underdone[else]little burned[end if] and a [if the folding level of the cake is underfolded]little too soft[else]bit tough[end if]."; otherwise if the baking level of the cake is not done: say "It tastes a [if the baking level of the cake is underdone]bit underdone[else]little burned[end if]."; otherwise if the folding level of the cake is not properly folded: say "It tastes a [if the folding level of the cake is underfolded]little too soft[else]bit tough[end if]."; otherwise: say "It tastes great!" Part - Miznia [MIZNIA.INF] Section - Jungle Zone of Miznia There is a region called Jungle Zone of Miznia. [Note that this object does not exist in the original; the word "jungle" is treated as a synonym for the MIZNIA_Outskirts (aka "City Limits") room.] A backdrop called the real Miznia jungle is in Jungle Zone of Miznia. The description of the real Miznia jungle is "Wow! This [bold type]really[roman type] reminds you of a picture you once saw of the Miznia jungles." Understand "barrier" as the real Miznia jungle when the location is City Limits. Section - Ruins Room [Note that, in the original source code, there was no special class for this type of room. It has been added here to help ensure consistency of lighting conditions in the hidden ruins, and to allow attachment of an "internal name" property to the kind.] A ruins room is a kind of room. A ruins room has some text called internal name. A ruins room is usually dark. Chapter - Mizniaport (MIZNIA_GUSStop) There is a room called Mizniaport. "The Great Change certainly hasn't changed the ultra-swank city of Mizniaport. The entire place is filled with splashy color and a disturbing sense of modernness. There's a stairway down here, while side walkways head west and northeast." Some splashy color and a disturbing sense of modernness are unimportant scenery in Mizniaport. The splashy color is uniquely-named. The walkways are in Mizniaport. [See "Entrance to Flathead Stadium" for declaration of this backdrop.] The circular sign is in Mizniaport. [See "Entrance to Greater Anthar" for declaration of this backdrop.] Chapter - Miznia Suburbs (MIZNIA_Park) A room called Miznia Suburbs is west of Mizniaport. "Overly cozy-looking homes sprout up all over the place here. Ridiculously well-trimmed front lawns remind you that you're still in Miznia. A nice pebble path heads east and west. You see the entrance to a swanky-looking boutique to the south." Some cozy-looking homes, some well-trimmed front lawns, and a pebble path are unimportant scenery in Miznia Suburbs. The lawn and the grass are in Miznia Suburbs. [See "South Quad" for declaration of these backdrops.] Section - Swanky-Looking Boutique A proxy entrance called a swanky-looking boutique is in Miznia Suburbs. The relevant direction of the swanky-looking boutique is south. Understand "window" as the swanky-looking boutique. Section - Stuffed Toy Alligator (stuffed_toy) [Interestingly, a comment in the original source code implies this might have once been in a location called "Super Zmart" which was edited out by Mr. Yu.] A stuffed toy alligator is in Miznia Suburbs. "A stuffed toy has been left unattended on someone's lawn." The description of the stuffed toy alligator is "A cute little stuffed toy alligator." The size of the stuffed toy alligator is 15. Understand "gator" or "stuffed animal" as the stuffed toy alligator. Chapter - Swank Boutique (MIZNIA_Boutique) [Note that, in the original source code, this location made use of the I6 'general' attribute to track whether the tailor had presented the scroll to the PC. This implementation uses I7's internal state tracking to similar effect.] A room called Swank Boutique is south of Miznia Suburbs. "A ultra-swank accessory store, filled with flashy items for the fashion-unconscious shopper. An exit lies north." Some flashy items are unimportant scenery in Swank Boutique. Understand "accessory" or "accessories" or "item" as the flashy items. [Note that the following logic was originally part of the alarm_clock object but is moved here per notes in the "Alarm Clock" section. Also note that the message for seeing activity in the boutique when outside it is not part of the original. Also note that the probably-soon-to-be-illegal method used here of generating an "alarm clock singing" action has an undesirable side-effect: It seems that the every turn rules are check prior to action processing of this event and the every turn rules are not checked again afterwards. As a result, this rule forces an execution of the "award points for obtaining scored objects rule" after moving the fancy scroll to the player to ensure both the accomplishment and the scroll's object point value are scored the same turn.] After the alarm clock singing when the location of the alarm clock is Swank Boutique and the alarm clock is not enclosed by a closed container (this is the summon the tailor with a bell rule): if the player can see the alarm clock: say "From somewhere in the back of the store, a tailor rushes out and "; if the fancy scroll has been on-stage: say "recognizes you. 'I've done all I can for you right now,' he explains as returns to the back of the store."; otherwise: now the player carries the fancy scroll; follow the award points for obtaining scored objects rule; [see note above] accomplish pin-the-scroll-on-the-frumpy; say "sees you. 'We've got a rather busy schedule,' he explains, 'but let me see what I can do.' [paragraph break]He gives your attire a disapproving once-over. 'The ascetic-monk look is out, you know. Here.' He pins a rolled paper object to your clothes. 'The latest craze -- wearing magic scrolls. Beats using them nowadays, I hear. Now, like I said, we're very busy.'[paragraph break]Clucking his tongue to himself, the tailor goes off to the back of the store."; otherwise: if the location is Miznia Suburbs and the player can see the swanky-looking boutique: say "You hear some ringing from the boutique to the south. There is some brief movement as someone peeks their head out from the back of the store." Section - Small Sign (boutique_sign) A small sign is in Swank Boutique. It is fixed in place. The description of the small sign is "The sign reads 'PLEASE RING BELL FOR SERVICE'." Section - Coin (c8) There is a coin in Swank Boutique. Section - Fancy Scroll (fancy_scroll) [Note that this object is declared in SPECIAL.INF in the original source code. It is relocated here for convenience of reference.] There is a scroll called a fancy scroll. The fancy scroll is inscribed with wigro. Chapter - City Limits (MIZNIA_Outskirts) A room called City Limits is west of Miznia Suburbs. "The city stops here abruptly. The Miznia jungle makes its presence known for real here, forming a natural barrier. A path leads east, while an almost overgrown path leads into the jungle to the southwest." City Limits is in Jungle Zone of Miznia. An almost-overgrown path is unimportant scenery in City Limits. Chapter - Edge-of-Jungle (Jungle_Edge) [Note that the 6G60 compiler has some issues with "Edge of Jungle" as a room name due to declared kind of value "edge", so hyphens are used here and the I7 "printed name" property is declared.] A room called Edge-of-Jungle is southwest of City Limits. "Wild birds and wilder vegetation distract you from a faint trail through the jungle here. The path leads northeast and southwest." The printed name of Edge-of-Jungle is "Edge of Jungle". Edge-of-Jungle is in Jungle Zone of Miznia. Some wild birds are unimportant scenery animals in Edge-of-Jungle. Some wilder vegetation and a faint trail are unimportant scenery things in Edge-of-Jungle. The wilder vegetation is vegetable-like and uniquely-named. Chapter - Deep Jungle (Deep_Jungle) A room called Deep Jungle is southwest of Edge-of-Jungle. "You're in very deep jungle, just on the verge of getting lost. Your surroundings are green and untamed. A path leads northeast, while a muddy path heads south." Deep Jungle is in Jungle Zone of Miznia. A muddy path is unimportant scenery in Deep Jungle. Understand "mud" as the muddy path. Section - Muddy Scroll (muddy_scroll) A scroll called a muddy scroll is in Deep Jungle. "Partially buried in the mud is a scroll." The muddy scroll is inscribed with throck. Chapter - Swamp (Swamp) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether the player was allowed to go west from this room to Jungle_Ruins (aka "Hidden Ruins"). This implementation take a different approach, testing the world state for a map connection that is created when appropriate, so no equivalent property for the room is needed.] A room called Swamp is south of Deep Jungle. "You're knee-deep in a murky swamp. Huge swamp grasses wall you in[if the room west of Swamp is Hidden Ruins], except for a section to the west[end if]. Drier land is north or south." Some swampland is unimportant mass-nouned scenery in Swamp. Understand "swamp" or "land" as the swampland. Section - Swampgrass (grasses) Some swampgrass is mass-nouned vegetable-like scenery in Swamp. The description of the swampgrass is "Tall, thick swampgrass." Understand "swamp grass" or "grass" or "grasses" as the swampgrass. Instead of pushing or pulling or attacking or cutting the swampgrass (this is the hardy swampgrass is hardy rule): say "The grass is extremely hardy." [Note that, in the original logic, the player had to be carrying (in top-level inventory) the map while searching the grasses to find the secret path. Given that a) the map is described as crudely drawn, so precise comparison to it should not be necessary, and more importantly b) modifying the logic to be based on the PC having read the map is extremely easy in I7, the logic has been changed in the following rule to reflect the PC's state of knowledge and not the state of inventory.] Instead of searching the swampgrass when we have not examined the jungle map (this is the PC vs player knowledge dichotomy strikes again rule): say "You hunt around in the grasses for a while and find nothing." Instead of searching the swampgrass when we have examined the jungle map (this is the knowing is half the battle rule): change the east exit of Hidden Ruins to Swamp; change the west exit of Swamp to Hidden Ruins; accomplish trailblazer; say "You check the jungle map. Sure enough, there's a loose patch of grass that you could duck under to the west." After casting throck at the swampgrass (this is the swampgrass growth is maxed out rule): say "You complete the chant, but nothing changes[first time]. Grasses don't grow much more than this[only]." Chapter - Jungle Clearing (Jungle_Clearing) [Note that the description of this room is modified slightly from the original: The portion regarding the natives is moved to that "person".] A room called Jungle Clearing is south of Swamp. "The jungle clears out a bit here, so you can actually see patches of sky and walk ten paces without running into a tree. There's a path into the jungle undergrowth to the north." Jungle Clearing is in Jungle Zone of Miznia. An unimportant uniquely-named scenery thing called the sky is in Jungle Clearing. The path is in Jungle Clearing. [See "Forest Garden" for declaration of this backdrop.] [Note a very slight deviation from the original source code's logic here: The original would bring the shaman to this room the second time the room's I6 'each_turn' routine ran, while this implementation brings the shaman the first time the player lingers in the room for at least a turn. The functional difference is that someone passing through without stopping will never be greeted by the shaman, which seems fitting. It is certainly possible to emulate the original logic precisely -- see commented-out version of the rule.] Every turn when the player has been in Jungle Clearing for one turn and the jungle shaman has not been in Jungle Clearing (this is the natives send a delegate rule): now the jungle shaman is in Jungle Clearing; say "A single native tribesman breaks away from the group and approaches you." [KEEP - Every turn when the player has been in Jungle Clearing for one turn or the player has been in Jungle Clearing twice (this is the natives send a delegate rule): if the jungle shaman has not been in Jungle Clearing: now the jungle shaman is in Jungle Clearing; say "A single native tribesman breaks away from the group and approaches you."] Section - Group of Jungle Natives (natives) [Note that, in the original source code, this object made use of the I6 'concealed' property to prevent a description, probably because the room description for Jungle_Clearing mentioned the group of natives. This implementation relocates the descriptive text to this "person", and consequently there is no attempt to replicate the concealment here.] Some open-inventoried plural-named people called some jungle natives are in Jungle Clearing. "You notice a group of jungle natives gathered here." The description of the jungle natives is "A group of jungle natives in elaborate feather and fur clothing. They are armed with [large spears]." Understand "group" or "group of" as the jungle natives. The natives carry some unimportant things called some large spears. Understand "spear" as the large spears. The jungle natives wear some unimportant mass-nouned things called some elaborate clothing. Understand "feather" or "feathers" or "fur" as the elaborate clothing. This is the tribe default life behavior rule: say "The group of natives looks at you with distrusting stares." Instead of doing something when the current action is generic life behavior and the current action involves the jungle natives (this is the jungle natives generic life rule): abide by the tribe default life behavior rule. Persuasion rule for asking the jungle natives to try doing something (this is the reroute understood orders to tribe to generic life response rule): consider the tribe default life behavior rule; rule fails. To indicate proselytizing relies on a common language: say "They can't understand your language, thus the meaning of the sermon is lost on them." After casting foblub at the jungle natives (this is the let's let Lenny handle this hyper dude rule): indicate proselytizing relies on a common language. After casting espnis at the jungle natives (this is the let's let Lenny handle this boring dude rule): indicate proselytizing relies on a common language. Section - Jungle Shaman (Shaman) [Note that, in the original source code, this object made use of the I6 'general' flag to keep track of when the player had given him the headdress. Since it seems that, once given, the headdress always remains on the shaman's head, this implementation tests the state of the world model directly instead of using a logically equivalent flag. Also note that, although the original source code contains a comment indicating that Mr. Yu considered giving this object the I6 'transparent' property, it is not actually a property of the object. Both this and the special logic in the description routine imply that the player is not intended to be able to see the fact that the shaman carries a map, so this person is left in the default state of "closed-inventoried" here (see section on "Transparency (for Things versus People)" in the "Emulating Inform 6 Conventions" chapter of the "General Rules" part). Finally, note that, in the original source code, this object included logic unique to the Order action section of its Life() routine, so this person does not get the typical set of "generic life behavior" rules.] The jungle shaman is a man. The description of the jungle shaman is "A jungle native with a rather intricate costume made of bird plumage and animal hides. He seems old, but wise[if the jungle shaman is not wearing the headdress]. Unlike the rest of the natives, this one is not wearing a fancy feather-and-fur headdress[end if]." Understand "old" or "wise" or "but wise" or "native" or "tribesman" as the jungle shaman. The jungle shaman wears an unimportant thing called an intricate costume. Understand "bird" or "plumage" or "animal" or "hides" as the intricate costume. [Note that, while I would stylistically prefer an after rule here, the interference of "generic life behavior" rules makes it necessary to implement this logic as an instead rule, as well.] Instead of giving the headdress to the jungle shaman (this is the hey thanks have a map rule): now the jungle shaman wears the headdress; now the player carries the jungle map; say "The shaman takes the headdress and places it on his head. He smiles, and gives you a strange map in return." Instead of giving something to the jungle shaman (this is the jungle shaman generic response to being given something rule): say "The shaman smiles and shakes his head." To offer an appropriate response to the Cortez Gambit: say "As you make a threatening move, several of the natives step forward and pierce your body with stout spears. It appears they've had bad dealings with outsiders before."; end the game in death. Instead of attacking the jungle shaman (this is the rumble in the jungle rule): offer an appropriate response to the Cortez Gambit. Instead of throwing something at the jungle shaman (this is the what makes you think we won't cut you rule): offer an appropriate response to the Cortez Gambit. Instead of showing the headdress to the jungle shaman (this is the jungle shaman is interested in the headdress rule): say "The shaman nods and points to the headdress, then himself." Instead of showing something to the jungle shaman (this is the jungle shaman generic response to being shown things rule): say "The shaman says something in a language you've never heard before." Instead of doing something when the current action is generic life behavior and the current action involves the jungle shaman (this is the jungle shaman generic life rule): say "You can't seem to communicate with him; their language is completely foreign to you." To indicate language barriers are proof against sermons: say "You complete the sermon, but the shaman seems very puzzled by your speech, and clearly can't understand a word you've said." After casting foblub at the jungle shaman (this is the this priest guy seems very animated rule): indicate language barriers are proof against sermons. After casting espnis at the jungle shaman (this is the this priest guy seems very dull rule): indicate language barriers are proof against sermons. [About the following rule: It's not clear why the equivalent logic exists in the original source code, as the shaman is not given the I6 'transparent' attribute and no mention of the map is made until the PC offers the headdress. However, testing release 3/960606 shows that the response is offered, so in the interest of completeness it is reproduced here. Note that this implementation limits the response to the PC asking the shaman to give the map to him -- in the original this would also be shown if asking the shaman to give the map to someone else.] Persuasion rule for asking the jungle shaman to try giving the jungle map to the player (this is the you must have x-ray vision rule): say "You try to convey your desire for the map with gestures. The shaman seems to understand. He points to the map, then you. Then, he raises his hand in a [']stop['] gesture. Then, he points to his bare head."; stop the action. Persuasion rule for asking the jungle shaman to try doing something (this is the should have brought the phrasebook rule): say "The shaman does not seem to understand."; rule fails. Section - Jungle Map (Jungle_Map) The shaman carries a jungle map. The jungle map is papery. The description of the jungle map is "The map is somewhat crudely drawn:[paragraph break][fixed letter spacing][18 spaces]xxxx[line break][18 spaces]xxxx[line break][18 spaces]XXXX[line break][17 spaces]/[line break][13 spaces]XXXX[line break][13 spaces]XXXX[line break][13 spaces]XXXX[line break][15 spaces]I[line break][13 spaces]oooo[line break][7 spaces]<#>---oooo[line break][13 spaces]oooo[line break][15 spaces]I[line break][13 spaces]XXXX[line break][13 spaces]XXXX[line break][13 spaces]XXXX[paragraph break][variable letter spacing]". The size of the jungle map is 10. Chapter - Hidden Ruins (Jungle_Ruins) There is a room called Hidden Ruins. "Hidden here in some extremely deep jungle are the ruins of some ancient civilization. Broken sandstone structures are nearly covered with jungle vines and mosses.[paragraph break]There is a partially intact structure to the north. It seems to be a squat, pyramid-like building, with a single dark entrance hidden amongst vines. Definitely a find to write the Monastery about, or at least your local Archeology Guild." Hidden Ruins is in Jungle Zone of Miznia. Some broken sandstone structures are unimportant scenery in Hidden Ruins. Some vines and some jungle mosses are vegetable-like unimportant scenery in Hidden Ruins. Section - Squat Pyramid-Like Building [Note that, as in other places in this implementation, room synonyms are implemented as actual objects. In this case, a "proxy entrance" is used for ones that invite attempts to "enter" them.] A proxy entrance called a squat pyramid-like building is in Hidden Ruins. The relevant direction of the squat pyramid-like building is north. Understand "pyramid" or "entrance" or "structure" as the squat pyramid-like building. Chapter - Pyramid Entrance (TEMPLE_Ent) A ruins room called Pyramid Entrance is north of Hidden Ruins. "A damp, dark, unmarked stone room. You can hear the sounds of the jungle from the exit to the south. There are dark passages north and east." After listening to Pyramid Entrance (this is the even expected noises can be unexpected rule): say "You hear noises of the jungle from the south." Instead of going south from Pyramid Entrance with the tall statue (this is the it's really too big to be a good souvenir rule): say "The statue doesn't appear to fit through the entranceway." Chapter - Statue Room (TEMPLE_Statue_room) A ruins room called Statue Room is east of Pyramid Entrance. "A tiny dark chamber, with a passage west." Section - Tall Statue (TEMPLE_Statue) [Note that, in the original source code, this object makes use of the I6 'general' attribute to indicate whether the statue has been used to jam the roller trap. The more descriptive property 'wedged between rollers' is used in this implementation to effect comparable logic. In addition, although this object has the I6 'static' property, that is omitted here to prevent the I7 standard rules from cutting off evaluation of an after rule for pushing without a direction. The "instead of taking the tall statue" rule should serve to prevent players from wandering off with it, and although 6G60 will oddly allow something to be both static *and* pushable between rooms, this seems inconsistent on a style level. Also note that the logic attached to the taking action has been modified to differentiate between wedged and non-wedged states. Finally, note that the logic around pushing the statue around (including setting off the roller trap) has been moved to rules that are under each room instead of here. Finally, note that by "saying" the stone rollers noun in the initial description of the state, the initial description of the stone rollers is suppressed by virtue of already having been "mentioned" during the room description.] A thing called a tall statue is in Statue Room. "A tall statue of a fearsome warrior [if the tall statue is wedged between rollers]holds apart two tremendous [stone rollers], leaving a narrow corridor between them[else]looms from the darkness[end if]." The tall statue is pushable between rooms. The tall statue can be wedged between rollers. The description of the tall statue is "A stone statue of an ancient warrior[if the tall statue is wedged between rollers], stuck fast between the rollers[else], probably intended to frighten off visitors[end if]." Understand "tall" or "fearsome" or "warrior" as the tall statue. Instead of taking the tall statue when the tall statue is not wedged between rollers (this is the provide kleptomaniacs a hint about statue mobility rule): say "The statue wobbles a bit as you attempt to lift it, but is far too heavy to take." Instead of taking the tall statue when the tall statue is wedged between rollers (this is the sorry but you still can't have it rule): say "The statue is firmly wedged between the rollers." Instead of going somewhere from somewhere with the tall statue while the tall statue is wedged between rollers (this is the can't slide the statue when it's jammed rule): say "The statue is stuck fast and won't budge." Instead of going nowhere with the tall statue (this is the can't push statue through walls rule): say "You can't push the statue that way." [This rule follows the model used for the crates in the General Store. See the "Crate" kind for details.] Report the player going when the thing gone with is the tall statue (this is the make sure to mention moved statue in new room rule): consider the describe room gone into rule; say "With weary relief, you stop pushing the statue."; rule succeeds. [halt processing of report rulebook] [Note the small change from the original in this message to improve the hinting; the rocking is not significant but the fact that it can be moved is.] After pushing the tall statue (this is the this statue rocks rule): say "The statue[if the tall statue is wedged between rollers] seems to be stuck[else] fitfully scrapes a short distance across the floor as you strain to move it[end if]." [Note that this little cheat deviates from the original source code somewhat, as Mr. Yu's intent seemed to be to have every legitimate pushing direction included in the description, but he didn't write two separate cases dependent on the outbound direction from TEMPLE_Ent ("Pyramid Entrance"). Note that the "noun" here is the direction of movement when this is evaluated, not the statue as might be expected.] After going somewhere from somewhere with the tall statue (this is the cheap sound effects rule): say "Pushing with all of your might, you laboriously move the statue [noun]."; continue the action. Chapter - Strange Chamber (TEMPLE_Trap) [Note that, in the original source code, this object had string messages for its e_to and w_to properties. An "instead of going nowhere" rule is adopted in this implementation, which also covers the diagonal directions.] A ruins room called Strange Chamber is north of Pyramid Entrance. "This is an odd, long hallway running north and south. The stone floor is noticeably concave, sloping upwards to the east and west. It's like being in a long stone channel." A long stone channel is unimportant scenery in Strange Chamber. Understand "concave" or "slope" or "stone" or "floor" as the long stone channel. Instead of going nowhere in Strange Chamber when the noun is a cardinal direction (this is the trap sides slope too steeply to climb rule): say "The floor gets too steep, and you slide back down." Instead of going north from Strange Chamber when the tall statue is not wedged between rollers (this is the Indiana Jones fans will be both surprised and unsurprised by this rule): say "You head north, and hear a distinct click. Suddenly, two huge stone rolling pins roll down from the east and west sides of the room![paragraph break]Desperately, you try to escape, but the hall is too long, and the stone rollers too fast. You are crushed to jelly."; end the game in death. After going north from Strange Chamber when Bare Chamber is unvisited (this is the flavor text is best tasted once rule): say "You step over and around the jammed rollers and the statue on your way north."; continue the action. Instead of going north from Strange Chamber with the tall statue when the tall statue is not wedged between rollers (this is the better mousetrap meets better mouse rule): now the tall statue is wedged between rollers; now the stone rollers are in Strange Chamber; say "You start to push the statue north, and hear a distinct click. Suddenly, two enormous stone rolling pins slide down from the east and west sides of the room![paragraph break]With a desperate leap, you try to clamber up the statue, which topples forward as you clutch its torso. You hear a huge crash, and chips of stone sting your face.[paragraph break]You open your eyes, surprised not to find yourself squashed flat. The statue has wedged itself neatly between the two giant rollers, halting their descent." Section - Stone Rollers (rollers) There is a thing called some stone rollers. "There are two stone rollers pinned against the statue." The stone rollers are fixed in place. The description of the stone rollers is "Massive stone rolling pins." Understand "roller" or "rolling" or "pins" as the stone rollers. Instead of pushing or pulling or attacking or turning or shaking or squeezing the stone rollers (this is the squeezing seems incongruous in this list rule): say "The rollers are huge and stuck fast." Chapter - Bare Chamber (TEMPLE_1) A ruins room called Bare Chamber is north of Strange Chamber. "You are in a bare stone chamber with passages leading north, east, south and west. A stone ladder also heads upwards through a dark hole in the ceiling." The internal name of Bare Chamber is "Temple 1C". An unimportant backdrop called a stone ladder is in Bare Chamber. Understand "hole" or "holes" as the stone ladder. Chapter - Temple One West (TEMPLE_1W) A ruins room called Temple One West is west of Bare Chamber. "You're in a small, bare chamber. On one of the walls, you notice an engraving, almost worn away with age. It seems to be a picture of a jungle village, and you recognize the pyramid in which you currently are. An exit lies east." The internal name of Temple One West is "Temple 1W". The printed name of Temple One West is "Small Chamber". Section - Engravings (TEMPLE_Engravings) A scenery backdrop called some engravings is in Temple One West. Understand "engraving" as the engravings. Instead of examining the engravings (this is the just in case you missed it in the room description rule): say the description of the location with an extra line break instead. Chapter - Temple One North (TEMPLE_1N) A ruins room called Temple One North is north of Bare Chamber. "You're in a rather bare chamber. On one of the walls, you see a worn engraving depicting a group of robed figures standing in some chamber. They are carrying several long reeds. An exit lies south." The internal name of Temple One North is "Temple 1N". The printed name of Temple One North is "Small Chamber". The engravings are in Temple One North. [See "Temple One West" for declaration of this backdrop.] Chapter - Temple One East (TEMPLE_1E) A ruins room called Temple One East is east of Bare Chamber. "You're in a small stone chamber. In the center of the floor is a strange funnel-like depression, which starts as a large, circular opening, and narrows into a very small tunnel below, probably no wider than your hand. You also see a small, round hole in the ceiling above. An exit heads west." The internal name of Temple One East is "Temple 1E". The printed name of Temple One East is "Small Chamber". Instead of going nowhere from Temple One East when the noun is down (this is the can't go down the funnel rule): say "You'd never fit down that opening." Instead of going nowhere from Temple One East when the noun is up (this is the can't go up the small hole rule): say "You can't reach the hole, and you'd never fit through it if you could." Section - Dark Small Hole (TEMPLE_1_HOLEU) [Note that the I7 printed name property is used for this thing in a way that is typically omitted in this implementation. Since there are other holes in the game world, the expanded name makes it easier to disambiguate them, but "short" and "dark" were not in the parse list for the object, so it seems stylistically appropriate to simulate the I6 'short_name' property found in the original. Also note that this implementation makes this object into an I7 backdrop, so that it can be reused instead of creating duplicate objects in related rooms. Finally, note that the I6 'before()' routine for this object in the original contained a section for the I6 Receive action. Since this is not an actual container, it should not be possible to generate that action, so it is not specifically handled here. The rule preventing insertion of things into it should make this redundant in any case.] A backdrop called a dark small hole is in Temple One East. The description of the dark small hole is "You see a dark, small hole in the center of the ceiling." The printed name of the dark small hole is "hole". To indicate the hole is too high up: say "The hole is far above your head." [Note that the original source code prohibited touching, searching, pulling or pushing the hole. This implementation extends the rule to all direct (i.e. one noun, not two) actions requiring the ability to touch the hole.] Instead of doing something to the dark small hole when the action requires a touchable noun (this is the can't manipulate the dark small hole rule): indicate the hole is too high up. [Following rule provided so as to not have to worry about rule ordering with respect to the 6G60 Standard Rules' "can't insert into what's not a container" rule.] Instead of inserting something into the dark small hole (this is the can't put things in overhead hole rule): indicate the hole is too high up. Section - Funnel-Like Opening (TEMPLE_1_Opening) [See notes for "Smooth Round Hole" (TEMPLE_3_Opening) for more details on the function of this container. Also, note that some logic for the corresponding object in the original source code that is relevant to the I6 LetGo fake action is handled here with a rule for the taking action, due to the operation of the 6G60 Standard Rule "convert remove to take".] A funnel-like opening is a fixed in place open container in Temple One East. The description of the funnel-like opening is "A smooth funnel in the stone of the floor, which descends into darkness as it narrows." The carrying capacity of the funnel-like opening is 1. The size of the funnel-like opening is 10. Understand "funnel" or "depression" or "tunnel" as the funnel-like opening. Rule for writing a paragraph about the funnel-like opening (this is the funnel-like opening I6 describe equivalent rule): say "The opening "; if the funnel-like opening is empty: say "appears to be empty."; otherwise: say "contains:[paragraph break][Spiritwrak-style contents list for the funnel-like opening]". Instead of taking something (called sought item) when the noun is in the funnel-like opening (this is the can't reach bottom of funnel rule): say "You stick your hand down the small hole, but it is quite deep, and you can't quite reach [the sought item]." Instead of taking something (called sought item) when the noun is in the ancient wooden vase and the ancient wooden vase is in the funnel-like opening (this is the skipping this check makes the puzzle much simpler rule): say "You can't reach the vase, much less the contents of the vase." [player must use hunch to get this out] [Note a small change from the original message here in cases where the object is theoretically small enough to put into the funnel. The original code compares to the size of the TEMPLE_Artifact object ("ancient wooden vase") instead of the funnel itself; the reason is not certain but the author's best guess is to preserve the insertability of the ancient wooden vase even if the size of the vase is changed.] Instead of inserting something that is not the ancient wooden vase into the funnel-like opening (this is the only the right thing can go into the funnel rule): if the noun is sized and the size of the noun is greater than the size of the ancient wooden vase: say "That doesn't quite fit -- the funnel becomes too narrow too quickly."; otherwise: say "[The noun] wobble[s] strangely in the mouth of the hole, prevented from falling by a mysterious, elastic force. After a few moments, you give up trying to force [object pronoun of the noun] through and retrieve [object pronoun of the noun]." After inserting something (called the slid item) into the funnel-like opening (this is the process inserting things into the funnel-like opening rule): follow the temple traversal rules; if the outcome of the rulebook is: -- item stuck in funnel outcome: say "[The noun] slides a short distance and comes to rest, fitting perfectly into the narrow part of the funnel."; -- item stuck in vase outcome: say "[The noun] slides into the funnel and becomes lodged in [the ancient wooden vase]."; -- otherwise: say "Your hear [object pronoun of the noun] rattle down through a hidden pipe, then silence." [KEEP - original logic before [; Receive: if (noun ~= TEMPLE_Artifact) [only accept ancient wooden vase] { print "That doesn't quite fit -- "; if (noun.size > TEMPLE_Artifact.size) "the funnel becomes too narrow too quickly."; else "strangely..."; } LetGo: "You stick your hand down the small hole, but it must be quite deep, and you can't quite reach."; ], ] Section - Temple Traversal Rules for Temple Slide Puzzle [The way the logic for the "temple slide" puzzle was constructed in the original source code was somewhat hard to follow, since each relevant opening had its own I6 'before()' routine to process the entire sequence of events. The total system of interaction was not easy to comprehend at a glance and would be a pain to modify, so, in the interest of taking advantage of I7 to improve the elegance of the logic, the following rulebook is created to process the logic as an item moves from place to place in the temple. Note that the description of the action as related to the player becomes functionally divorced from the movement of the item, so it is necessary to craft "After inserting something into..." rules for each hole to describe what occurred. To accommodate this, the rulebook returns a named outcome. Also note a slight deviation from the original logic here, because it appeared that the original would trigger scoring when the player inserted a rod so long as *something* was in the funnel, even if it was not the ancient wooden vase. In addition, there is another deviation from the original source code's logic to prevent a possible run-time error due to trying to move the ancient wooden vase inside itself if it is put into the drain. (Interestingly, this run-time error does not occur in release 3/960606 -- the vase is shown to be inside itself using the "objects" command but seems to be no longer accessible as an object.)] Temple traversal rules is a rulebook. The temple traversal rules have outcomes item sank into pool, item ejected to second floor, item ejected to first floor, item stuck in drain, item stuck in funnel, item stuck in vase, and item stuck in piping. [some outcomes not used, available only for modification's sake] First temple traversal (this is the process slid item in smooth round hole rule): if a thing (called slid item) is in the smooth round hole and the slid item is the noun: if the slid item is not handled: now the slid item is handled; [force this state change since it seems to be omitted during implicit take in 6G60] if the black pool is not deflecting inbounds: [see "Black Pool" for definition of this] remove the slid item from play; item sank into pool; otherwise: now the slid item is in the black pool; [to be considered as falling towards it] make no decision. Temple traversal (this is the process slid item falling towards pool rule): if a thing (called slid item) is in the black pool and the slid item is the noun: if the black pool is deflecting inbounds: now the slid item is in the drain; [bounces into drain] make no decision; otherwise: remove the slid item from play; item sank into pool. The process slid item falling towards pool rule is listed after the process slid item in smooth round hole rule in the temple traversal rules. Temple traversal (this is the process slid item in drain rule): if a thing (called slid item) is in the drain and the slid item is the noun: now the slid item is in the funnel-like opening; otherwise: do nothing; make no decision. The process slid item in drain rule is listed after the process slid item falling towards pool rule in the temple traversal rules. Temple traversal (this is the process slid item in funnel-like opening rule): if a thing (called slid item) is in the funnel-like opening and the slid item is the noun: if only the slid item is in the funnel-like opening: [see "New Phrases to Decide"] item stuck in funnel; otherwise: if the ancient wooden vase is in the funnel-like opening and the noun is a rod and the ancient wooden vase is empty: if the noun is the black rod: accomplish temple-traversal; now the slid item is in the ancient wooden vase; item stuck in vase; otherwise: if the noun is the black rod: accomplish temple-traversal; now the slid item is in Temple One East; item ejected to first floor. The process slid item in funnel-like opening rule is listed after the process slid item in drain rule in the temple traversal rules. Chapter - Temple Two (TEMPLE_2) A ruins room called Temple Two is up from Bare Chamber. "You are in a bare stone chamber with passages leading north, east, south and west. A stone ladder leads upwards and downwards into dark holes." The internal name of Temple Two is "Temple 2C". The printed name of Temple Two is "Bare Chamber". The stone ladder is in Temple Two. [See "Bare Chamber" for declaration of this backdrop.] Chapter - Temple Two North (TEMPLE_2N) A ruins room called Temple Two North is north of Temple Two. "You're in a small, bare chamber. Engravings on the wall show several robed figures in a low domed chamber. Some of the figures are pushing what appears to be reeds down a small hole in the ground, while others stand by and seem to be praying or engaged in some ceremony.[paragraph break]In a separate scene, similar robed figures can be seen throwing some poor, rope-bound individual off the top of the pyramid, apparently in ritual sacrifice. An exit heads south." The internal name of Temple Two North is "Temple 2N". The printed name of Temple Two North is "Small Chamber". The engravings are in Temple Two North. [See "Temple One West" for declaration of this backdrop.] Chapter - Temple Two West (TEMPLE_2W) A ruins room called Temple Two West is west of Temple Two. "You're in a small, bare chamber. Engravings on the wall depict several robed figures in a room mostly filled with water. The figures are watching reeds that seem to fall from the sky and land in the water. Several reeds are floating towards an apparent drain in the water, where a few reeds that are thin enough fall through with the flow of the water. An exit lies east." The internal name of Temple Two West is "Temple 2W". The printed name of Temple Two West is "Small Chamber". The engravings are in Temple Two West. [See "Temple One West" for declaration of this backdrop.] Chapter - Temple Two South (TEMPLE_2S) A ruins room called Temple Two South is south of Temple Two. "You're in a rather small chamber. Engravings on the walls depict several robed figures in a peculiar room with a circular depression in the ground, filled with water. Water also flows into the pool in a thin stream from an undepicted source above. With the stream of water, a few reeds appear to be falling. A single figure is collecting the reeds as they fall and placing them in a long thin vase or container. The significance of this is uncertain. An exit lies north." The internal name of Temple Two South is "Temple 2S". The printed name of Temple Two South is "Small Chamber". The engravings are in Temple Two South. [See "Temple One West" for declaration of this backdrop.] Chapter - Small Chamber (TEMPLE_2E) [Note that, in the original source code, there is logic attached to this room to trigger an "amulet purple flash" message the first time the player reached either this room or Collapsed Chamber (TEMPLE_3). Based on the layout of the rooms of the Temple, with Small Chamber directly under Low Chamber (TEMPLE_3E), the apparent intent was to signal proximity to the rod piece in Low Chamber as a goad to keep the player exploring the temple, but to make sure that the message is displayed only once. The I6 'general' attribute would be set on the first room in which the flash message was seen, and each room would provide the message only if both it and the other room's 'general' attribute was unset. Here, this state tracking is done via the "scried" property of the earth spirit. Note that the I6 'before()' logic for the I6 Fill action has been moved to the section on the black pool.] A ruins room called Small Chamber is east of Temple Two. "You're in a bare stone chamber which is partially filled with a sunken pool of dirty, blackish water. Near the south wall is a depression in the floor that was probably a drain for the pool, given the apparent water stains; however, the level of the pool is below the point where it would overflow into the drain. Near the center of the ceiling is a small, round hole, right above the pool. An exit lies west." The internal name of Small Chamber is "Temple 2E". Some water stains are unimportant scenery in Small Chamber. Instead of swimming in Small Chamber (this is the yes swim swim to your DOOM rule): try swimming in the black pool instead. Every turn when the location is Small Chamber and the earth spirit is unscried (this is the amulet flash if needed for Small Chamber rule): signal proximity to an unholy artifact guarded by the earth spirit. Section - Dark Small Hole (TEMPLE_2_HOLEU) The dark small hole is in Small Chamber. [See "Dark Small Hole" under "Temple One East" for declaration of this backdrop.] Section - Drain (TEMPLE_2_Opening) [See notes for "Smooth Round Hole" (TEMPLE_3_Opening) for more details on the function of this container.] A scenery open container called a drain is in Small Chamber. The carrying capacity of the drain is 1. The size of the drain is 10. The description of the drain is "A smooth drain opening in the stone of the floor, which descends into darkness." Understand "opening" or "depression" or "smooth" as the drain. [Here we use a check rule rather than an instead rule because really that's what we're doing.] Check inserting something into the drain (this is the more arbitrary restrictions on what can be passed through rule): if the noun is not the ancient wooden vase and the noun is not a rod: say "Oddly, that doesn't fit through the small, round drain."; stop the action. To indicate transition of slid thing from second floor to first floor: say "After a brief pause, you hear a thump from somewhere below." [See section "Temple Traversal Rules for Temple Slide Puzzle" in chapter "Temple One East" for the definition of the temple traversal rulebook used by the following rule.] After inserting something (called the drained item) into the drain (this is the process inserting things into the drain rule): say "[The noun] drops into the drain and disappears from sight. [run paragraph on]"; follow the temple traversal rules; if the outcome of the rulebook is: -- item ejected to first floor outcome: indicate transition of slid thing from second floor to first floor; -- item stuck in vase outcome: indicate transition of slid thing from second floor to first floor; -- item stuck in funnel outcome: indicate transition of slid thing from second floor to first floor; -- otherwise: say "Your hear [object pronoun of the noun] rattle down through a hidden pipe, then silence." [KEEP- original logic before [; Receive: if ((noun ~= TEMPLE_Artifact) && (noun hasnt is_rod)) [if it's not a rod or the ancient wooden vase, disallow] "Oddly, that doesn't fit through the small round drain."; else [rod or vase inserted] { if (children(TEMPLE_1_Opening) == 0) [if 1st floor hole is empty, become inaccessible in it] move noun to TEMPLE_1_Opening; if (TEMPLE_Artifact in TEMPLE_1_Opening && children(TEMPLE_Artifact) == 0) [if empty vase is in 1st floor hole, rod gets stuck in it out of reach] move noun to TEMPLE_Artifact; else [otherwise it bounces out for retrieval] move noun to TEMPLE_1E; CDefArt(noun); " drops into the drain and disappears out of sight. Moments later you hear a thump from somewhere below."; } ], ] Section - Black Pool (TEMPLE_Pool) A fixed in place open watery container called a black pool is in Small Chamber. The description of the black pool is "Murky black water that seems disturbingly calm[if the umbrella is in the black pool][umbrella floats in pool][end if]." The size of the black pool is 25. Understand "murky" or "water" as the black pool. To say umbrella floats in pool: say ". Floating on the surface is an open, black umbrella". Definition: The black pool is deflecting inbounds if it contains the umbrella. Rule for writing a paragraph about the black pool (this is the pool I6 describe equivalent rule): say "The black pool is disturbingly calm[if the umbrella is in the black pool][umbrella floats in pool][end if]." Instead of filling a container when the black pool is at hand (this is the no need to carry evil water rule): say "The blackish water seems like something you really don't want." Instead of entering or swimming in the black pool (this is the recreational swimming in supernatural ruins is not advised rule): say "You notice that the water seems unusually cold as you enter the pool. Without warning, something grabs your legs and pulls you under! In pitch black liquid that seems to absorb all light, you can't defend yourself, or even see your adversary, who devours you shortly."; end the game in death. Instead of searching the black pool (this is the I guess this is just looking not sticking your hand in there rule): say "You can't see a thing; the water is blacker than night." Carry out examining the black pool (this is the suppress listing of pool contents when examining rule): consider the standard examining rule; rule succeeds. [Forces halt to carry out rulebook processing before moving on to standard examining rule.] After casting frotz at the black pool (this is the pool resists illumination rule): say "[one of]There's a strange gurgling noise as you finish the chant, and the black water starts to glow! But, t[or]T[stopping]o your horror, the inky water seems to quickly absorb the light and return to its original blackness." After inserting the toy volcano into the black pool (this is the awwwww I expected something more exciting rule): remove the toy volcano from play; now the progression of the toy volcano is complete; say "You drop the toy volcano into the black pool and watch it sink. Moments later, a large bubble rises and pops at the surface, accompanied by an odd, belch-like noise." After inserting an open umbrella into the black pool (this is the apparently floating umbrellas on water is irresistible to adventurers rule): say "The open umbrella sits in the pool, floating on the surface like a cloth dome."; After inserting something (called the submerged item) into the black pool (this is the please do not feed the pool monster rule): remove the submerged item from play; say "[The noun] falls into the pool and slowly sinks into the black water.[paragraph break]Suddenly, [object pronoun of the noun] seem[s] to get pulled into the pool, and [is-are] soon gone! Something dwells in that pool, apparently, hidden well in a cover of blackness." Every turn when the black pool is at hand and the open umbrella is in the black pool and the umbrella is lit (this is the there is no way to illuminate the pool rule): now the umbrella is not lit; say "Eerily, the magical light of the umbrella seems to drain into the blackness below[first time], until it has been totally consumed[only]." Chapter - Collapsed Chamber (TEMPLE_3) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether the amulet had flashed here or not. Here, this state tracking is done via the "scried" property of the earth spirit.] A ruins room called Collapsed Chamber is up from Temple Two. "You are in a stone chamber that has broken and eroded walls in several places. Broken stones and dirt are everywhere. It appears there was once an open archway east; however, the heavy stones that framed it have collapsed. A tiny hole remains, but it would be an exceptionally tight squeeze. A stone ladder leads downwards into a dark hole." Some stones, some dirt, and a ruined archway are unimportant scenery in Collapsed Chamber. The dirt is mass-nouned. Understand "heavy" or "broken" as the stones. Every turn when the location is Collapsed Chamber and the earth spirit is unscried (this is the amulet flash if needed for Collapsed Chamber rule): signal proximity to an unholy artifact guarded by the earth spirit. Section - Tight Squeeze [Note that there is no equivalent to this door in the original source code; originally, logic in the e_to and w_to properties of the rooms connected by the squeeze each independently checked whether the player "had" (carried/wore) anything. In I7 it seems cleaner to implement a door and create one rule to enforce the restriction. Also note the small change in the message here so that players will not keep dropping things to try to find out what the presumed safe item limit is.] A scenery open unopenable door called a tight squeeze is east of Collapsed Chamber. Instead of going through the tight squeeze while the player bears anything (this is the classic tight squeeze puzzle rule): say "You try to squeeze through the hole, to no avail. It's too small to take anything through with you." Section - Earth Spirit (earth_spirit) [Note that this thing makes use of the spirit kind, which did not exist in the original source code. See "New Kinds" for details.] There is a spirit called an earth spirit. The description of the earth spirit is "It looks like a large moving mass of mud and earth, in a somewhat man-like shape." Understand "large" or "moving" or "mud" or "man-like" or "shape" or "mass" or "mass of" as the earth spirit. The killing blow description of the earth spirit is "The earth creature moves quickly, and blinds you with a spray of dirt. You clear your eyes, only to see the brown mass move forward and bury you! You struggle, but you suffocate in a short time." The successful strong attack description of the earth spirit is "The earth spirit clubs you with a heavy pseudopod made of animated soil and rock. Ouch!" The successful medium attack description of the earth spirit is "[if the location is Collapsed Chamber]The earth spirit hurls loose soil and sand into your face. The attack knocks you back, and you fall into the chamber below[else]The earth spirit throws some loose soil and sand in your face, pummeling you as you spit and blink[end if]." The attack misses player description of the earth spirit is "The earth spirit sends a spray of sharp rocks your way, and you dodge just in time." The cumulative injuries kill the player description of the earth spirit is "The last blow from the earth spirit was too much for you, I'm afraid to say. The spirit slowly sludges towards you for the final blow...". The successful hit by player description of the earth spirit is "You strike the earth creature, but the mud instantly reforms around the wound! You hear a strange noise from the creature -- akin to mad laughter from someone trapped underground in a coffin." The miss by player description of the earth spirit is "You attack the earth spirit, but miss!" The reaction to spellcasting of the earth spirit is "The creature makes a banshee howl, and a showering of pebbles and grit to the face garbles your chant." The banishment event description of the earth spirit is "As you speak the chant, the earth spirit falls back in fear! You finish the chant, and the earth spirit collapses into a heap of dirt and mud, banished." Every turn when the player is in Collapsed Chamber and the player had not been in Collapsed Chamber (this is the summon earth spirit to interfere at the temple rule): move the earth spirit to Collapsed Chamber; say "Some of the dirt and mud in one corner stirs. A form made of mud and earth suddenly rises to attack!" The summon earth spirit to interfere at the temple rule is listed after the generic spirit attack rule in the every turn rulebook. [This prevents the earth spirit from killing the player instantly upon arrival with a lucky roll.] Chapter - Low Chamber (TEMPLE_3E) [Note that the original source code declares this room as having light. Here, the lichens and mosses are the light source, as that is how they are described.] A ruins room called Low Chamber is east of tight squeeze. "You're in a tiny low room, dimly lit by strange glowing lichens and mosses. A tiny exit lies west between some collapsed rock -- it looks like a very tight squeeze. The room is otherwise filled with broken rock and the like. A tiny round hole is in the very center of the floor." Some glowing lichens and some glowing mosses are scenery in Low Chamber. The glowing lichens and glowing mosses are lit. The glowing mosses are vegetable-like. The glowing lichens are fungus-like. Some broken rock is unimportant mass-nouned scenery in Low Chamber. Instead of going nowhere from Low Chamber when the noun is down (this is the Phillipe the Mouse you ain't rule): say "You can barely fit your hand in the hole." After casting throck at the glowing lichens (this is the a brief biology lesson for the curious rule): say "The energy summoned by the chant swirls around the lichens uncertainly, eventually dissipating without effect. Lichens are as much fungus as plant, if not more." Section - Smooth Round Hole (TEMPLE_3_Opening) [In the version of the original source code received from Mr. Yu, this object is linked to two others: TEMPLE_2_Opening ("Drain") and TEMPLE_1_Opening ("Funnel-Like Opening"), but the logic of the puzzle was difficult to glean. The apparent intended solution is for players to get the ancient wooden vase (TEMPLE_Artifact), put the vase into the funnel-like opening on the 1st floor, float the umbrella in the black pool, then insert the black rod into the smooth round hole in this section. The rod will bounce off the umbrella into the drain, then fall through and into the vase in the funnel (unless the vase has a rod in it already, in which case the dropped rod will bounce out to the floor). Importantly, the ancient wooden vase (TEMPLE_Artifact) had I6 'before()' logic to ensure that only a rod could be put into it, and that things in it could not be taken out if it was in the funnel-like opening. In addition, the funnel-like opening (TEMPLE_1_Opening) had logic to prevent things from being taken out of it at all. Together, these rules imply that once the rod was in the vase, it would not be retrievable, which stumped me since I knew I had solved this when playing the game originally. The solution, which should not be a meaningful spoiler to anyone reading this, is to get the vase out of the funnel using the huncho spell and then retrieve it from Atrii.] A scenery fixed in place open container called a smooth round hole is in Low Chamber. The carrying capacity of the smooth round hole is 1. The size of the smooth round hole is 10. Understand "tiny" or "opening" as the smooth round hole. Check inserting something that is not a rod into the smooth round hole (this is the only rods fit into the smooth round hole rule): say "Oddly, that doesn't quite fit."; stop the action. [Note a slight deviation from the original logic here, because it appeared that the original would trigger scoring when the player inserted a rod so long as *something* was in the funnel, even if it was not the ancient wooden vase.] To indicate transition of sliding thing from third floor to first floor: say "Moments later, you hear a thump from below, followed by a rattling noise, and finally another thump, much fainter." [See section "Temple Traversal Rules for Temple Slide Puzzle" in chapter "Temple One East" for the definition of the temple traversal rulebook used by the following rule.] After inserting something (called the slid item) into the smooth round hole (this is the process inserting things into temple third floor hole rule): say "[The slid item] slips through with ease. [run paragraph on]"; follow the temple traversal rules; if the outcome of the rulebook is: -- item sank into pool outcome: say "Moments later, you hear a splash from somewhere below."; -- item ejected to first floor outcome: indicate transition of sliding thing from third floor to first floor; -- item stuck in vase outcome: indicate transition of sliding thing from third floor to first floor; -- item stuck in funnel outcome: indicate transition of sliding thing from third floor to first floor; -- otherwise: say "Your hear [object pronoun of the noun] rattle down through a hidden pipe, then silence." [KEEP - Original source code before [; Receive: if (noun hasnt is_rod) [can only put rod in hole on 3rd floor] "Oddly, that doesn't quite fit."; else { print "The rod slips through with ease. Moments later you"; if (umbrella notin TEMPLE_Pool) [sinks into black pool unless umbrella floating in it] { remove noun; " hear a splash from somewhere below."; } else [bounces off umbrella into drain and falls through] { if (children(TEMPLE_1_Opening) == 0) [if nothing in 1st floor hole, becomes inaccessible] move noun to TEMPLE_1_Opening; else { if (TEMPLE_Artifact in TEMPLE_1_Opening && children(TEMPLE_Artifact) == 0) [if empty ancient wooden vase in 1st floor hole, get stuck in vase] move noun to TEMPLE_Artifact; else [if vase has something in it or something other than vase in hole, bounce out for retrieval] move noun to TEMPLE_1E; Achieved(22); [temple-traversal achievement] } " hear a thump from below, followed by a rattling noise, and finally another thump, much fainter."; } } ], ] Section - Black Rod Piece (black_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A fake rod called a black rod piece is in Low Chamber. "In the center of the room is a short black rod." The color of the black rod piece is "an inky black". Understand "inky" as the black rod piece. Chapter - Front of Swank House (FROBAR_Ent) [Note the use of a printed name here to minimize the chance for I7 6G60 compiler confusion from having a room name that starts with an important preposition. Also note the use of a "proxy entrance" object to implement the room synonym "house" in the original source code.] A room called Front of Swank House is northeast of Mizniaport. "You're in front of a rather swanky-looking house to the northeast. To the southwest is the rest of Mizniaport." The printed name of Front of Swank House is "In Front of Swank House". Section - Swanky-Looking House A proxy entrance called a swanky-looking house is in Front of Swank House. The relevant direction of the swanky-looking house is northeast. A thing called a stout door is part of the swanky-looking house. [IMPDO - real door for this?] [IMPDO - knocking action?] Instead of entering the stout door (this is the when is a door not a door rule): try entering the holder of the stout door instead. Instead of unlocking or opening the stout door (this is the no housebreaking option rule): if Frobar is not in Wizard's Home: say "Your life at the monastery has[first time] (fortunately)[only] not equipped you with the skills for breaking and entering."; otherwise: say "The door swings lightly at your touch. You're free to walk right in." [This rule, in conjunction with the proxy entrance, replaces both the I6 ne_to and the I6 in_to routines in the original source code.] Instead of going to Entrance Foyer from Front of Swank House while Frobar is not in Wizard's Home (this is the can't visit Frobar when he's not home rule): say "You walk up to the front door, only to find it locked." Section - Mailbox (Frobar_mailbox) A fixed in place closed openable container called a mailbox is in Front of Swank House. The description of the mailbox is "A mailbox stands in front of the house. The letter 'F' is on one side." The carrying capacity of the mailbox is 5. The size of the mailbox is 15. Section - Copy of Enchanter Monthly (Ench_mag) [Note the use of a printed name for this thing to avoid the problem of having a quotes in the name of a thing.] A copy of Enchanter Monthly is in the mailbox. Understand "magazine" as the copy of Enchanter Monthly. The description of the copy of Enchanter Monthly is "'Enchanter Monthly' has been somewhat lacking in quality content these days, the absence of magic probably being a large factor behind this. For filler, the editors have been turning in mostly tabloid drivel articles about 'What ever happened to so-and-so?'. This month's cover story suggests that Barsap the magician was actually turned into a tortoise during the Great Cataclysm, and underwent a slow mutation into a newt." The size of the copy of Enchanter Monthly is 15. The printed name of the copy of Enchanter Monthly is "copy of 'Enchanter Monthly'". Part - Special Locations, Frobar's Home [SPECIAL.INF] Section - Wizard's Home [The following region is set up to define Frobar's home, to allow a positive definition (i.e. "in Wizard's Home") instead of a negative definition (e.g. "not in Delbin's Pub") for certain rules.] There is a region called Wizard's Home. Chapter - Entrance Foyer (FROBAR_Foyer) A room called Entrance Foyer is northeast of Front of Swank House and inside from Front of Swank House. "You are in the entrance foyer of a small but tasteful home. The exit is to the southwest. [paragraph break]The general area is tastefully done in maroon carpeting and brass fixtures. Another room lies to the north." It is in Wizard's Home. Some maroon carpeting is unimportant mass-nouned scenery in Entrance Foyer. Understand "carpet" as the maroon carpeting. The brass fixtures are in Entrance Foyer. [See "Inside Skyscraper" for declaration of this backdrop.] Chapter - Parlor (FROBAR_Parlor) A room called Parlor is north of Entrance Foyer. "You are in a very decorative parlor. Various furnishings of high quality are arranged around an enormous rug with intricate golden symbols in the weave design. Open doorways lead south, north, east and west." It is in Wizard's Home. Some high quality furnishings, an enormous rug, some intricate golden symbols and a weave design are unimportant scenery in Parlor. Some doorways are unimportant scenery in Parlor. Understand "doorway" as the doorways. Section - Large Potted Plant (frobar_plant) A large potted plant is in Parlor. "A large potted plant sits in one corner." It is vegetable-like. The description of the large potted plant is "A well-tended house-plant." Understand "house plant" or "houseplant" or "house-plant" or "pot" as the potted plant. [Note that the original source code indicated that Mr. Yu considered a reaction from Frobar if the player cast throck at the plant while he was present, but that he "couldn't think of a proper reaction."] After casting throck at the large potted plant (this is the Frobar remembers when gardening was this easy rule): say "The plant seems even healthier now."; if Frobar is at hand: say "[line break]Frobar sighs heavily[first time]. 'I thought it was doing well enough. Without magic,' he says[only]." Chapter - Lounge (FROBAR_Lounge) A room called Lounge is west of Parlor. "A large room here apparently serves as a lounge for entertaining. The walls and furniture all have interesting design work that gives an impression of dignified age. A doorway heads east." It is in Wizard's Home. Some furniture and some interesting design work are unimportant mass-nouned scenery in Lounge. An unimportant backdrop called a doorway is in Lounge. Chapter - Study (FROBAR_Study) A room called Study is east of Parlor. "This is a study room with fancy wooden paneling and plush carpeting. There is an exit to the west." It is in Wizard's Home. Some fancy wooden paneling is unimportant mass-nouned scenery in Study. The plush carpeting is in Study. [See "Governor's Office" for declaration of this backdrop.] Section - Large Bookshelf (FROBAR_shelves) A fixed in place supporter called a large bookshelf is in Study. "A large bookshelf takes up most of the north wall." The description of the large bookshelf is "It's filled with odds and ends, mostly uninteresting." The carrying capacity of the large bookshelf is 30. Understand "shelf" or "shelves" as the large bookshelf. Section - Plain Journal (FROBAR_Journal) A plain journal is on the large bookshelf. The description of the plain journal is "This is a short journal of notes that Frobar was keeping. The contents are quite dull, mostly consisting of entries like 'Remember to water plant' and so forth. In fact, the only non-trivial entry follows:[paragraph break]'Perhaps today I will go visit Barsap's latest creation. Then again, maybe I won't. This so-called [']Gambit['] of his is supposed to be some silly diversion where people can hop around floating platforms trying to reach the southeast corner platform on the bottom level, just so they can get teleported back to the top, and start all over again! Can this be a monetarily beneficial thing? I doubt it.'" The size of the plain journal is 15. Section - Twisted Parchment (p5) [Note the conversion of implicit underlining in the original source text to bold type here, consistent with other, similar cases.] A parchment called a twisted parchment is on the large bookshelf. The description of the twisted parchment is "'...understand. I, like many of the Order, have understood that the greatest Saints of our Order were the Three, those Three that we know as the Ancient Ones.[paragraph break]Why then, do I find in ancient cairns, in hidden temples, and in versions of the Scriptures found in unsettled lands, that [bold type]four[roman type] beings that called themselves the Ancient Ones did do battle with evil and were defeated? This surely is not to be believed, but I...'". Section - Massive Wooden Desk (FROBAR_Desk) A fixed in place supporter called a massive wooden desk is in Study. The description of the massive wooden desk is "A massive wooden desk carved from a single block of wood." The carrying capacity of the massive wooden desk is 20. Chapter - Bedroom (FROBAR_Bedroom) A room called Bedroom is north of Parlor. "A nice cozy bedroom. The exit is south." It is in Wizard's Home. Section - Large Bed (FROBAR_bed) A fixed in place enterable supporter called a large bed is in Bedroom. The description of the large bed is "A large, comfortable-looking bed." Understand "comfortable" or "comfortable-looking" as the large bed. After looking under the large bed (this is the well I guess some players might be concerned about that rule): say "Sorry, no monsters here." Section - Large Painting (FROBAR_Painting) [Note that this object is commented out in the original, but it is interesting.] A large painting is fixed in place in Bedroom. "There is a large painting hanging on the wall." The description of the large painting is "It's a well-executed oil painting of a [if the painted scroll is part of the large painting]scroll on a [end if]table. A small note on the frame says, 'Still-life[if the painted scroll is part of the large painting] with Scroll[end if], -FF, 791'". Instead of taking the large painting (this is the Frobart is not portable rule): say "It's much too large to carry around." Instead of taking the painted scroll while the painted scroll is part of the large painting (this is the treat trying to take the painted scroll as touching Frobar's painting rule): try touching the large painting instead. After touching or rubbing the large painting when the painted scroll is part of the large painting (this is the tactile interaction with the large painting reveals its magical nature rule): now the player carries the painted scroll; accomplish what-scrolls-may-come; say "As you touch the painting, your hands run across the scroll, and the oil takes on a three-dimensional quality! You ignore the bizarre sensations as you reach into the painting, and withdraw the scroll[if Frobar is at hand].[paragraph break]Frobar watches the events over your shoulder, and clucks to himself. 'Now, why didn't [italic type]I[roman type] ever think to try that,' he muses[end if]." After touching or rubbing the large painting when the painted scroll is not part of the large painting (this is the painting magic only works once rule): say "Nothing unusual occurs. It seems to be nothing more than a normal, mundane oil painting now." Section - Painted Scroll [Note: Although this object was referred to in commented-out portions of the original source code, the original definition was not included. This scroll is intentionally not scored since it is an "easter egg" item.] An unscored scroll called a painted scroll is part of the large painting. The painted scroll is inscribed with trohsme. Part - Special Locations, Thief's Home [SPECIAL.INF] Section - Brigand's Domain [The following region is set up to define the Thief's home, to simplify certain rules.] Brigand's Domain is a region. Chapter - Wondrous Stairway (THIEF_Bottom_of_staircase) [Note that the original source code contains an I6 w_to property with a string containing the the default library message for not being able to go that direction, which is later replaced by a routine associated with the magic_door object. This sort of operation is not allowed in I7, so it is handled differently in this implementation by installation of a "hidden" door called the Thiefway. See the "Thiefway" section for details. The original room description is slightly truncated as a result.] There is a room called Wondrous Stairway in Brigand's Domain. "An enormous spiral staircase seems to wind miles above your head in this curious, column-like chamber. Distant points of light brighten the chamber from above." A spiral staircase is an unimportant backdrop in Wondrous Stairway. Understand "stairway" or "stairs" as the spiral staircase. Some points of light are an unimportant distant view in Wondrous Stairway. [A small nicety for the I7 version.] Instead of climbing the spiral staircase when the location is Wondrous Stairway (this is the interpret climbing stairs from bottom as going up rule): try going up instead. After going up from Wondrous Stairway (this is the flavor text for entering Thief's house rule): say "You begin the long trek upwards. Strangely, the stairs seem to twist and move as you step on them, turning like a corkscrew, until you are graciously deposited at the top, far above your previous location."; continue the action. Chapter - Fancy Hall (THIEF_Ent) A room called Fancy Hall is in Brigand's Domain. It is up from Wondrous Stairway. "This must be an apartment or penthouse in the skyscraper. You are in a very high hall, with black slate stone walls that seem to reflect shadows everywhere. There is a room to the north. The southern edge of this room drops off into the darkness, followed by a long spiral staircase. The ceiling overhead seems to have tiny points of light like a night sky." Some slate is unimportant mass-nouned scenery in Fancy Hall. The shadows are in Fancy Hall. [See "Royal Museum" for declaration of this backdrop.] The spiral staircase and the points of light are in Fancy Hall. [See "Wondrous Stairway" for declaration of these backdrops.] [Another small nicety.] Instead of climbing the spiral staircase when the location is Fancy Hall (this is the interpret climbing stairs from top as going down rule): try going down instead. Chapter - Magnificent Foyer (THIEF_Foyer) A room called Magnificent Foyer is in Brigand's Domain. It is north of Fancy Hall. "This is an exceptionally grand entrance foyer, with sweeping arched ceilings and sparkling chandeliers. The room is dimly lit. Open hallways lead south and west." Some sparkling chandeliers are unimportant scenery in Magnificent Foyer. Chapter - Fancy Lounge (THIEF_Lounge) [Note the small change to the tapestry description when compared to the original source code.] A room called Fancy Lounge is in Brigand's Domain. It is west of Magnificent Foyer. "A tastefully overdone lounge with rich tapestries and gold enamel-finished walls. The room is dimly lit, although you see no windows or other sources of light. Open hallways lead east and west." Some rich tapestries and some gold enamel are unimportant scenery in Fancy Lounge. The gold enamel is mass-nouned. Understand "walls" or "enamel-finished" as the gold enamel. Section - Short Journal (THIEF_Journal) A short journal is in Fancy Lounge. "There's an open journal sitting here." The description of the short journal is "This appears to be a short collection of notes:[paragraph break]'TIPS ON CRACKING THE NEW FROBOZZCO 3-DIAL COMBO LOCKS: [line break]Remember, there's a slight flaw in the design. For every correct number in the correct dial, pressing the opening button will cause a small click. Dials with the correct number in the wrong dial place will cause a small thunk. The lock mechanism scans for correct numbers in correct places first, and then for correct numbers in the wrong place in the [']remaining dials[']. Simple! But don't forget, closing the locks will automatically lock and reset the dials![paragraph break]NEW FLATHEAD PAINTING:[line break]I've completed making the copy of the new Leonardo Flathead painting, received courtesy of the Royal Museum. Glad to say my skills in art forgery are undiminished -- I can barely tell the difference between the two myself! I'll soon replace the original with the copy, and no one will be the wiser!'" The size of the short journal is 15. Chapter - Workroom (THIEF_Storeroom) [Note that, in the original source code, this object made use of the I6 'general' flag to track whether the granite wall had been turned into pasta, and the wall itself had no existence as a separate object. In this implementation (which has the luxury of Glulx's comparatively infinite space compared to the Z-machine limits within which the original was forced to fit), the granite wall is made into its own thing, so the logic previously dependent on this room's general flag now tests the world state directly.] A room called Workroom is in Brigand's Domain. It is west of Fancy Lounge. "A sight to inspire even the most avaricious, this storeroom is filled with all sorts of rare and precious treasures. A hallway leads east[if the granite wall is in Workroom]. You notice that the west wall appears to be made of solid granite[end if]." The hallway is in Workroom. [See "Ancient Tunnel" for declaration of this backdrop.] [Note that this rule is required to emulate the response to "examine west" in the original.] Instead of examining west when the location is Workroom (this is the interpret examining west in the Workroom as examining the granite wall rule): try examining the granite wall instead. Section - Granite Wall [Note that, per the note for "Workroom" above, this object has no implementation in the original. The description of this object is effectively is a relocation of the message found in THIEF_Storeroom.before() routine of the original source code.] A granite wall is in Workroom. The granite wall is fixed in place scenery. The description of the granite wall is "The west wall is a solid piece of granite, which seems very odd, considering the other walls are clearly made of slate." Understand "solid" or "piece of" as the granite wall. [Note the slight wording change at the end of the following to avoid encouraging players to look for the "crack" mentioned in the original message and/or more coins.] After casting tossio at the granite wall (this is the what no sauce to go with it rule): remove the granite wall from play; now the pile of fettuccine carbonara is in Workroom; now a random uncirculated coin is in Workroom; say "As you finish the chant, the granite wall is replaced by a large mass of pasta. A hidden section of the room is revealed, along with the small mountain of gold coins it was hiding! The coins spill out, and nearly flood the room.[paragraph break]In a flash, a large group of financial nymphs appear on the scene. 'It looks like we found the missing GUS earnings,' one nymph says to another. Producing large sacks, they quickly collect the mass of coins and disappear with a twinkle.[paragraph break]As the last sparkle dies, a lone coin falls out of the closing transdimensional conduit, rolling to a stop near your feet." Section - Precious Treasures (THIEF_treasure) Some precious treasures are scenery in Workroom. The description of the precious treasures is "Piles of rare gemstones, precious jewelry, priceless artifacts, and other treasures line the walls here." Understand "treasure" or "jewels" or "gemstones" or "gems" or "artifacts" as the precious treasures. Instead of taking the precious treasures (this is the monks don't loot rule): say "Fortunately, your high moral standing allows you the benefit of having no need for such material excess." Section - Pile of Fettuccine Carbonara (pasta) [Note that this object, in the original source code, made use of the I6 'general' flag to track whether the player had already eaten his or her fill. This implementation uses I7's inherent state tracking to determine this, so a comparable flag is not replicated here.] There is an edible thing called a pile of fettuccine carbonara. The description of the pile of fettuccine carbonara is "A gigantic pile of fettuccine, dripping in carbonara sauce." The size of the pile of fettuccine carbonara is 16. Understand "gigantic" or "pasta" or "sauce" as the pile of fettuccine carbonara. [The following rules responses are not present in the original source code; they were added as a flight of fancy. Sadly, the addition of the "implicitly taking activity is going on" test finally triggered an insurmountable issue with room names that start with the preposition "on" (i.e. On Beam, On Fublio Bay, On Volcanic Island), so it was necessary to change these to hyphenated names. Well... not strictly necessary, but I wanted to keep these little bits of silliness.] [Thanks to WWI 17.32 for a good template for the following rule.] Rule for implicitly taking the pile of fettuccine carbonara when we have not eaten the pile of fettuccine carbonara (this is the a moment of levity for an absurd action rule): try silently taking the pile of fettuccine carbonara; if the player carries the pile of fettuccine carbonara: say "(first scooping up giant fistfuls of it)[line break]". Check taking the pile of fettuccine carbonara when we have not eaten the pile of fettuccine carbonara (this is the it's not a to-go order rule): if the implicitly taking activity is going on: continue the action; otherwise: let takeout bin be the largest container born by the player; if takeout bin is not nothing: say "Even [the takeout bin] wouldn't come close to holding all this pasta." instead; otherwise: say "You could never carry all this pasta around in your bare hands." instead. Check taking the pile of fettuccine carbonara when we have eaten the pile of fettuccine carbonara (this is the gluttony is a sin rule): say "You've already had enough of this stuff to last a lifetime. Just the thought of touching more is enough to make you queasy."; rule fails. [Note that the second sentence of the next message is not present in the original; it just seems appropriate in response to such an unnecessary and out-of-character action.] After eating the pile of fettuccine carbonara (this is the sure there's no hunger timer but hey free pasta rule): now the pile of fettuccine carbonara is in the location; [put it back into play] say "You manage to stuff yourself with pasta, but there's still quite a lot left. As you carefully lick your fingers clean, you idly wonder whether Brother Joseph would formally count this little incident as gluttony." Section - Counterfeit Painting (Painting_FAKE) [Note the deliberate presentation of a thing functionally identical to the priceless painting to the player via use of private naming. This is intentional as part of a puzzle structure. Also note that some location-sensitive logic attached to this object in the original source code has been moved to rules associated with those locations here. Also note that this item is given the "forged" property as befitting a counterfeit. Finally, note that some of the phrases used here are defined is section "Priceless Painting".] A forged artwork called a counterfeit painting is in Workroom. The counterfeit painting is privately-named. The description of the counterfeit painting is "It's a beautiful oil painting of a dark, stormy scene. On the horizon, you can see the edges of mountaintops. Near the top of the painting, two winged figures are carrying a lone individual towards a break in the clouds, from which a bright white light seems to emanate." The size of the counterfeit painting is 25. The printed name of the counterfeit painting is "priceless painting". Understand "priceless" or "painting" as the counterfeit painting. The counterfeit painting has some text called ledak-interaction event. The ledak-interaction event of the counterfeit painting is "[if the priceless painting is at hand]One of the paintings[else]The painting[end if] is surrounded by a bright yellow glow, and it disintegrates!" [These next few rules were a little trickier to construct in I7, since the priceless painting and its counterfeit version are deliberately crafted to "look the same" from the parser's perspective. Here the "asking which do you mean" activity (see WWI 17.29) looked like it would come in handy, specifically the ability to use half-defined actions. However, that route had the undesirable side effect that it would leave the command prompt expecting additional noun qualifiers, and inconsistent results could occur because the rule for expanding single-word casting commands would not be expanded after reading the prompt -- for example: ">take painting" followed by ">ledak" would be treated as ">take ledak painting", but ">take painting" followed by ">cast ledak" would result in the spell being cast. It turned out to be relatively simple to achieve the desired effect using a "does the player mean" rule that favors the counterfeit painting, though it is a bit painful that there doesn't seem to be a shorthand way to deal with all verbs that would allow the painting as a second noun. Some additional rules to suppress parser clarification in special cases brings the end result closer to the ideal.] Does the player mean doing something to the counterfeit painting: it is likely. Does the player mean casting a spell at the counterfeit painting: it is likely. Does the player mean throwing something at the counterfeit painting: it is likely. Does the player mean putting something on the counterfeit painting: it is likely. Does the player mean inserting something into the counterfeit painting: it is likely. To decide whether the player appears to be referencing the art: if the player's command includes "[artwork noun phrase]": decide yes; otherwise: decide no. Rule for clarifying the parser's choice of something when at least two artworks are at hand and the player appears to be referencing the art (this is the suppress parser choice during counterfeit confusion rule): do nothing; rule succeeds. Instead of taking the counterfeit painting when the priceless painting is at hand (this is the can't take the counterfeit when you don't know which is real rule): act confused about which painting is genuine. Instead of searching the counterfeit painting while the priceless painting is at hand (this is the can't search the counterfeit when you don't know which is real rule): act uncertain about which painting to inspect. After casting ledak at the counterfeit painting (this is the ledak destroys the counterfeit painting rule): seek and destroy the counterfeit painting. Part - Special Locations, Ethereal Plane of Atrii [SPECIAL.INF] Section - Aetherium Aetherium is a region. A featureless gray plane is an unimportant backdrop in Aetherium. Understand "flat" or "grey" as the featureless gray plane. Instead of going nowhere in Aetherium when the noun is a cardinal direction (this is the some boundaries aren't so ethereal rule): say "An invisible force blocks your way." Section - Overworld Room [Note that, in the original source code, there was no special class for this type of room. It has been added here for consistency and to allow attachment of an "internal name" property and standard printed name to the kind.] An overworld room is a kind of room. An overworld room has some text called internal name. The printed name of an overworld room is usually "Ethereal Plane of Atrii". Every overworld room is in Aetherium. Chapter - Atrii One (ATRII_1) There is an overworld room called Atrii One. "Standing on a featureless gray plane that stretches to the infinite horizon against a gray sky. You can only conclude one thing: You're on the Ethereal Plane of Atrii. Well, at least it fits the description Brother Palemon gave you.[paragraph break]It seems like you could go in any direction from here." The internal name of Atrii One is "Atrii N". The infinite horizon and the gray sky are unimportant uniquely-named scenery in Atrii One. Chapter - Atrii Two (ATRII_2) An overworld room called Atrii Two is southwest of Atrii One. "Flat, featureless gray is in every direction you look. Stranger still is the upright rectangular hole in the fabric of space that stands in the center of this area. Otherwise, you could wander this gray dimension in any direction, it seems." The internal name of Atrii Two is "Atrii NW". Section - Rectangular Hole (ATRII_2_hole) An open unopenable scenery door called a rectangular hole is inside from Atrii Two. The description of the rectangular hole is "[first time]Surely you are in a place where the very laws of nature and the Gods work by different rules! [only]Here stands a rectangular hole, seemingly torn out of the very space you stand in. You see some curious metal chamber through the opening, though, when you peek around the side of hole, you see nothing directly behind it." Through the rectangular hole is Inside Skyscraper. After going through the rectangular hole (this is the beam me down Scotty rule): say "You step through and feel your stomach twist. You stumble past a set of open metal doors into...[line break]"; continue the action. Chapter - Atrii Three (ATRII_3) An overworld room called Atrii Three is southeast of Atrii One and east of Atrii Two. "Flat, featureless gray is in every direction you look. Stranger still is the flat, glass-like square in the center of the [']floor['] of this area. Otherwise, you could wander this gray dimension in any direction, it seems." The internal name of Atrii Three is "Atrii NE". Section - Square of Ice (ATRII_3_ice) An enterable scenery supporter called a square of ice is in Atrii Three. The description of the square of ice is "It looks and feels like a perfect square of ice, flush with the featureless gray surface you stand on." Understand "glass" or "glass-like" as the square of ice. After touching the square of ice (this is the hint at how to use the square of ice portal rule): say "It's not exactly cold, and there is an unsettling sensation of your fingers being drawn [italic type]into[roman type] it." [See note in section "Prison Cell" for a technical note about the original source code logic producing the following message.] After entering the square of ice (this is the descend from Atrii Three rule): say "You step onto the square, and before you know it, your surroundings shift and start to fade! You feel a sudden, chilling wind. The ice seems to lengthen and stretch. The gray plane slowly turns white and bumpy."; now the player is in Upriver. Chapter - Atrii Four (ATRII_4) An overworld room called Atrii Four is southwest of Atrii Two. "Flat, featureless gray is in every direction you look. Stranger still is the large black hole to the south. Otherwise, you could wander this gray dimension in any direction, it seems." The internal name of Atrii Four is "Atrii W". Instead of going south in Atrii Four (this is the interpret going south near black hole as entering the black hole rule): try entering the black hole instead. Instead of going inside from Atrii Four (this is the interpret going inside near black hole as entering the black hole rule): try entering the black hole instead. Section - Black Hole (ATRII_4_hole) An open unopenable scenery door called a black hole is south of Atrii Four. The description of the black hole is "It looks like a large hole, probably twice your height. It's completely black and featureless." Through the black hole is Subway Tunnel. [See note in section "Prison Cell" for a technical note about the original source code logic producing the following message.] After going through the black hole (this is the descend from Atrii Four rule): say "You step into the black hole. You stumble forward, surrounded by a darkness blacker than night."; continue the action. Chapter - Atrii Five (ATRII_5) An overworld room called Atrii Five is southeast of Atrii Three. "Flat, featureless gray is in every direction you look. It seems like you could go in any direction from here." The internal name of Atrii Five is "Atrii E". Section - Ripped Parchment (p9) A parchment called a ripped parchment is in Atrii Five. The description of the ripped parchment is "'...now know that the Rod we believe is the Rod of the Ancients, sequestered in our Monastery, is an artifact of evil! Imprisoned inside, true to the scriptures we know (at least this much is, what isn't, I can nowadays say is much), is Anabais.[paragraph break]What is worse: This very Rod is an artifact of evil power created by Anabais, in the image of the True Rod of the Ancients, which he planned to use to aid him in his evil gains. Were that evil one free again, and had about him both his brothers and his Rod of Evil, we would witness a reckoning greater than Quendor has ever known![paragraph break]I take relief in the knowledge that he will never be freed, and he will never regain his implement of evil; only an innocent being can break the false rod and free him from his prison, and subsequently, the false rod cannot be regained by Anabais through his own will, or another evil being.[paragraph break]In fact, only a being of good again can gather the resulting pieces, and only through this being can Anabais regain his evil artifact, for...'". Chapter - Atrii Six (ATRII_6) An overworld room called Atrii Six is south of Atrii Two and southeast of Atrii Four. "Flat, featureless gray is in every direction you look. It seems like you could go in any direction from here." The internal name of Atrii Six is "Atrii SW". Chapter - Atrii Seven (ATRII_7) An overworld room called Atrii Seven is south of Atrii Three and southwest of Atrii Five and east of Atrii Six. "Flat, featureless gray is in every direction you look. Stranger still is the oddly-shaped depression in the gray plane here. Otherwise, you could wander this gray dimension in any direction, it seems." The internal name of Atrii Seven is "Atrii SE". Section - Oddly-Shaped Depression (ATRII_7_depression) An open unopenable scenery door called an oddly-shaped depression is down from Atrii Seven. The oddly-shaped depression can be enterable. The oddly-shaped depression is enterable. The description of the oddly-shaped depression is "It's a large, elongated depression in the gray [']floor[']. The cavity has a flat bottom, and a somewhat cigar-like shape." Understand "cavity" or "elongated" or "cigar-like" or "shape" as the oddly-shaped depression. Through the oddly-shaped depression is Atrii Seven. [Needed to allow entering it to count as going somewhere instead of nowhere] [See note in section "Prison Cell" for a technical note about the original source code logic producing the following message.] After going through the oddly-shaped depression (this is the descend from Atrii Seven rule): say "You step into the depression. Your surroundings start to fade, replaced by sunlight that makes you squint. The gray plane undulates and buckles to become a great body of water before your very eyes![line break]"; now the player is in the sailboat. Chapter - Atrii Eight (ATRII_8) [Note that, in the original source code, this location would have its I6 'general' attribute set on first "ascent" and it had to be unset to trigger the transition to the Implementor's residence. The one-time nature of this opportunity is preserved in this implementation, but some details are changed to offer slightly more hinting about the significance of the streaks of light.] An overworld room called Atrii Eight is southeast of Atrii Six and southwest of Atrii Seven. "Flat, featureless gray is in every direction you look[if the streaks of light are in Atrii Eight]. Directly overhead, you notice odd streaks of light[end if]. From here, you could wander this gray dimension in any direction, it seems." The internal name of Atrii Eight is "Atrii S". [Note that, in the original source code, the logic for the following rule appears as part of huncho_spell definition in MIZNIA.INF.] After casting huncho at the player while the player can see the streaks of light (this is the there are realms beyond our imagination and you just got a visitor pass rule): engage spell blocking; say "Once you complete the chant, the white streaks of light above widen, as though a rift was being torn in the sky! You feel a force pulling you upwards, into a mysterious realm..."; move the player to Strange Room. Section - Streaks of Light Some streaks of light are scenery in Atrii Eight. The description of the streaks of light is "They're hard to see clearly, and even harder to describe[first time]. If you were feeling poetic, you might call them flaws in the vault of the heavens[only]." To indicate the distant nature of the celestial flaws: say "The streaks are much too far above." Instead of doing something when the current action involves the streaks of light (this is the streaks are too far to reach rule): if the noun is the streaks of light and the action requires a touchable noun: indicate the distant nature of the celestial flaws; stop the action; otherwise if the second noun is the streaks of light and the action requires a touchable second noun: indicate the distant nature of the celestial flaws; stop the action; otherwise: continue the action. Part - Special Locations, Implementor's Residence [SPECIAL.INF] Section - Celestial Apartment Celestial Apartment is a region. Chapter - Strange Room (Imp_Liv) [Note that, in the original source code, this object made use of the I6 'number' property to track what the player would hear if they listened in the location as well as to control starting of the Imp ('Implementor") object's I6 'daemon()' function (via its I6 'each_turn()' routine watching the value of the 'number' property). Here the listening function is subsumed into the "overhear sleep-deprived Imp rule" at the end of this section, which can change the Implementor's "considering caffeine" property, a state change that feeds into the "Coffee Quest" scene's starting conditions. Also note the small changes to the room description as compared to the original source code. In addition, this object made use of the I6 'Before()' routine with a section for the I6 Listen action to let the player follow the action of the Implementor when out of sight. The equivalent logic is moved to other rules, including every turn rules in this section, every turn rules for the curtains (see following section), and the coffee run rules. Finally, note that this object included an I6 'time_out()' property that was used to start the Implementor's coffee quest after 10 turns if the player had not already triggered it by listening. While most timers in the original are handled via "at the time when..." constructions, in this case the time limit is built into the rule that starts the "Coffee Quest" scene (see that section).] There is a room called Strange Room. "[first time]You feel a great sense of dread: Surely, given the way you got here, this must be the domicile of an Implementor! [only][one of ]The[or]This[stopping] entire place feels strange and alien and, well, 'modern.' Something like a kitchen is to the east.[if the curtains are not open] Long curtains cover what must be a window to the south[else] On the south wall, long curtains are parted to reveal a bewildering view[end if]." Strange Room is in Celestial Apartment. Instead of going nowhere in Strange Room when the noun is south and the player is not in the curtains (this is the interpret going south in Strange Room as entering curtains rule): try entering the curtains instead. To say will to caffeinate: now the Implementor is considering caffeine. After listening to Strange Room (this is the reroute listening to the location to listening to the door when applicable rule): try listening to the plain-looking door instead. Every turn when the player is in Strange Room and the Implementor is in Strange Kitchen and the Implementor is awake (this is the cue the player that the Imp is busy in the kitchen rule): say "You hear some faint noises to the east." Section - Curtains (Imp_Curtains) [Note that the treatment of this object in the original source code is very unfair to the player, requiring them to guess the verb "enter" while also strongly hinting that it is not openable. The message text is modified to remove that misleading "hint." Interestingly, the original source code here made the curtains enterable without being a container or a supporter. No actual example of this is shown in DM4, but p. 179 does mention the possibility in the I6 world model description item 2.3.4.4. In this implementation, it is converted to a container to allow the same type of state detection of the player being "in" (i.e. behind) the curtains. Since they are clearly not transparent, they are made "lit" as a convenience to prevent the player from being plunged into darkness upon closing them while inside. Also note that the curtains are made into scenery here, unlike in the source code received, since the curtains are mentioned in the room description. Finally, note that this object did not have a defined size in the original source code. It is arbitrarily given a size of 50 (the original source code's value for the prison cell) to prevent the size check from intercepting attempts to put things into it, but putting things into it is normally prohibited (see below).] Some curtains are a closed openable scenery enterable container in Strange Room. The curtains are lit. The description of the curtains is "Heavy, cloth curtains[if curtains are open and the player is not in the curtains] along the south wall, parted to reveal a city beyond your most fevered imagination[else if curtains are closed and the player is not in the curtains] drape to the floor along the south wall[else if the curtains are open and the the player is in the curtains] to either side[else if the curtains are closed and the player is in the curtains], blocking your view of the room beyond[end if]." The size of the curtains is 50. Understand "curtain" or "cloth" or "heavy-cloth" or "drapes" as the curtains. Before listening to the location while the player is in the curtains (this is the cover up basic accessibility rule issue with handwaving rule): say "It's hard to hear through the thick folds of the curtains, but you try..."; rule succeeds. [This cuts off the listening action attempt before it gets a chance to fail due to the basic accessibility rule. Not 100% sensible once the Coffee Run scene is done, but most players will probably not linger in the curtains long enough to notice.] Instead of entering the closed curtains (this is the curtains must be open to enter them rule): say "You fumble with the heavy folds of the curtains, unable to find a way through. However, you notice that they seem to shift slightly near their top -- perhaps they can be pushed aside?" Instead of pushing the curtains (this is the interpret pushing the curtains as opening them rule): try opening the curtains instead. Instead of pulling the curtains (this is the interpret pulling the curtains as closing them rule): try closing the curtains instead. Instead of entering the open curtains when Coffee Quest has not happened (this is the protagonist is momentarily stunned by the sights rule): say "You take a half-step towards the window, marvelling at the sight of so much that is wondrous and incomprehensible. However you try, you can't quite bring yourself to get closer at the moment." Instead of exiting while the player is in the curtains (this is the treat exiting while in curtains as opening the curtains rule): try opening the curtains instead. Instead of going nowhere when the noun is north and the player is in the curtains (this is the treat going north while in curtains as opening the curtains rule): try opening the curtains instead. Instead of entering the open curtains when Coffee Quest has ended (this is the protagonist can't handle the truth rule): say "You step closer to the window, between the curtains, but the sight of so much that is alien to you is overpoweringly disturbing, and you quickly retreat." After opening the curtains (this is the reveal a world of wonder rule): reveal the window of wonders; say "You draw back the curtains[one of] and see a sight that staggers the mind! [or]. [stopping]Through the windows, the night sky falls across an unknown landscape, dotted with intensely bright points of light. Tall buildings seem to be everywhere[first time]. Whatever world you've stumbled onto, it certainly is not your own[only]." After closing the curtains (this is the out of sight is thankfully out of mind rule): obscure the window of wonders; say "You pull the curtains shut, thankful for the relief from that disturbing view." After entering the curtains during Coffee Quest (this is the hopefully the player intended to hide rule): now the curtains are closed; say "Quickly, you dart behind the curtains and pull them closed behind you." After looking while the player is in the closed curtains (this is the modify strange description of this world state rule): say "You can't see much of the strange room from behind these curtains[first time]. Hopefully, that means you can't be seen, either[only]."; if the player can see the terrifying window: [should always be able to] try examining the terrifying window. After opening the curtains while the player is in the curtains (this is the discourage further lingering at the window rule): say "Eagerly, you turn away from the terrifying view outside and push through the curtains into the room beyond."; now the player is in Strange Room. Every turn when the player is in the curtains and the Implementor is in Strange Room and the current action is not listening (this is the cue the player that the Imp is in the room rule): say "You hear some faint noises nearby, beyond the concealing folds of the curtain." The cue the player that the Imp is in the room rule is listed after the Coffee Quest scene drives coffee run rule in the every turn rules. Section - Terrifying Window [This object does not exist in the original; it was created to ensure the player could still look out of it while hiding in the curtains.] There is a lit scenery thing called a terrifying window. The terrifying window is fixed in place. The description of the terrifying window is "Outside, [one of]a river of red and white lights flows by far below you[or]you spy clusters of lights moving across the sky, like stars marching in formation[or]your eyes are drawn to the flicker of bluish light visible through many of the windows on the building nearest you[or]you spot tiny figures in several of the brightly-lit window of a nearby building; it is astonishing to think of buildings that house whole villages[or]you see clusters of tiny figures walking on the ground far below, their paths illuminated by lamps that gleam with a steady, magical radiance[in random order]." Understand "windows" or "bewildering" or "view" or "city" as the terrifying window. To reveal the window of wonders: now the terrifying window is in the curtains. To obscure the window of wonders: now the terrifying window is off-stage. Chapter - Strange Kitchen (Imp_Kitchen) A room called Strange Kitchen is east of Strange Room. "A room that could be a kitchen, if it didn't seem completely strange. Harsh, bright light seems to be coming from an unknown source. Strange-looking, white countertops and cabinets fill the area, along with a curious white closet-like object. A room lies to the west." Strange Kitchen is in Celestial Apartment. Some countertops, some strange-looking cabinets, and a refrigerator are unimportant scenery in Strange Kitchen. Understand "counter" or "countertop" as the countertops. Understand "cabinet" as the cabinets. Understand "closet" or "closet-like" or "object" or "white" or "curious" as the refrigerator. Section - Large White Vault [Note that this thing does not appear in the original source code. The author of this port just wanted a place to put the Implementor's stash of iced tea.] A fixed in place closed openable container called a large white vault is in Strange Kitchen. "In one corner stands what might be a large white vault, making a metallic humming noise." The description of the large white vault is "You have no idea what it is. As tall as you if not taller, it somewhat resembles a vault. At least, it looks as through the front part might open like a heavy door." The size of the large white vault is 30. Understand "tall" or "box" or "door" or "refrigerator" or "fridge" as the large white vault. Instead of opening the large white vault when we have opened the large white vault (this is the it's simpler to disallow exploration of the refrigerator's contents rule): say "Not a chance. Whatever's in there can [bold type]stay[roman type] in there." After listening to the large white vault (this is the auditory exploration of refrigerator rule): say "It seems like the kind of noise that would become bothersome after a while." After touching the large white vault (this is the tactile exploration of refrigerator rule): say "The surface is smooth to the touch but bumpy, like finely-rippled glass. The vibration of the humming tickles your fingertips." After opening the large white vault (this is the my god it's full of stars rule): now the large white vault is closed; say "The door resists at first, but with a tug it separates from the main vault. As you start to swing the door open, cold air seeps from the vault's interior, and a sudden light flares within! Instinctively, you slam the door shut in time to keep whatever horror the vault contains safely sealed within." Section - Curious Machine (Coffee_maker) [As with the original, it's possible for the player to take this back to the "normal" world. Seems like it should be good for a gag somewhere.][IMPDO] A curious machine is in Strange Kitchen. The description of the curious machine is "A white plastic device that seems to encase a glass pitcher or kettle of some sort. Most odd." The size of the curious machine is 15. Understand "white" or "plastics" or "device" or "glass" or "pitcher" or "kettle" as the curious machine. Section - Can of Regular Coffee (regular_coffee_can) A can of regular coffee is in Strange Kitchen. The description of the can of regular coffee is "The can reads:[paragraph break][fixed letter spacing][6 spaces]Brand-X coffee crystals[paragraph break][3 spaces]'Rich, mountain-grown flavor.'[variable letter spacing]". The size of the can of regular coffee is 15. Instead of opening the can of regular coffee (this is the can't open the regular coffee can rule): complain about the lack of a can opener. Section - Plain-Looking Door (Imp_door) [Note that this object has been moved up a bit from the order of implementation in the original source code. Also note that, due to way the built-in door kind works in I7, the I6 'when_open' and 'when_closed' properties are replaced by the I7 initial appearance, and the I6 'door_dir', 'door_to', and 'found_in' properties plus the 'static', 'door' and 'openable' properties are omitted since they are unnecessary. Also note that, due to the changes in the way the curtains are implemented, the logic of initial appearance is modified. Finally, new authors note some trickiness about the initial appearance property of this door -- a substitution produces a variable initial appearance. It is important that the final character in the *initial appearance text* be a period to get the normal room description rules to do the correct line spacing. A final period produced by the substitution is not sufficient, the Standard Rules will think there should be no paragraph break after the initial description since the property's text does not end in the right punctuation.] A door called a plain-looking door is west of Strange Room. The initial appearance of the plain-looking door is "There's a[if the plain-looking door is open]n open[else] closed[end if] door to the [direction of plain-looking door from the location][plain door context]." The description of the plain-looking door is "A plain-looking door. A note attached to it says 'DO NOT DISTURB, IMPLEMENTOR AT WORK'." Understand "note" as the plain-looking door. To say plain door context: let adjacent place be the other side of the plain-looking door from the location; if the front side of the plain-looking door is the location and Implementor is in adjacent place and the Implementor is awake and the Implementor is sluggish: say ". You hear some faint noises coming from [prepositional adjective for the plain-looking door] it"; otherwise if the front side of the plain-looking door is the location and the Implementor is in adjacent place and the Implementor is awake and the Implementor is recharged: say ". The sound of someone whistling a merry tune emanates from [prepositional adjective for the plain-looking door] it"; otherwise if the front side of the plain-looking door is the location and the Implementor is in adjacent place and the Implementor is asleep: say ". The sound of someone snoring loudly comes from [prepositional adjective for the plain-looking door] it". To say prepositional adjective for (X - a door): if X is open: say "beyond[run paragraph on]"; otherwise: say "behind[run paragraph on]". After listening to the plain-looking door while the plain-looking door is closed and the awake working sluggish Implementor is in Strange Bedroom (this is the eavesdrop on sleep-deprived Imp rule): say "[one of]It sounds like someone is talking to himself to the west. You hear: 'Now, wait just a second here, the player object is gone! How did that happen?'[or]It sounds like someone is talking to himself to the west. You hear: 'That can't be right. I must be getting tired. [will to caffeinate]Think I'll make myself a nice hot cup of coffee.'[stopping]". After opening the plain-looking door while the Implementor is in Strange Bedroom and the Implementor is awake (this is the I have seen the face of god and it is startled rule): say "You open the door, revealing a small room with what must be an Implementor sitting behind a desk. The Implementor looks up, startled. 'You're here?' he says, observantly. "; return the player to the proper plane, with dismissal; if the Implementor is sluggish: [Coffee Quest happens after banishment] now the Implementor is seeking coffee; follow the resolution of Coffee Quest in absentia rule. Chapter - Strange Bedroom (Imp_Bedroom) A room called Strange Bedroom is west of the plain-looking door. "A very curious, small bedroom. A white desk sits here amongst other odd furnishings." Strange Bedroom is in Celestial Apartment. Section - Coffee Cup (coffee_cup) [This object was commented out in the original source code. Future authors may want to reclaim it from the editing room floor.] [KEEP - commented out in original !Object coffee_cup "large cup" ! with name "cup" "large", ! description "A large mug, with the residue of some brown liquid left in it.", ! weight 5, ! size 4, ! has container open; ] Section - Odd Furnishings (Imp_Bed) [Note that this object is commented out in the original source code, but it seems likely that this was cut due to space constraints that don't apply here, so it is restored.] Some odd furnishings are scenery in Strange Bedroom. The description of the odd furnishings is "Some weird bedroom furniture."Understand "bed" or "chair" or "furniture" as the odd furnishings. Section - White Desk (Imp_Desk) A white desk is a scenery supporter in Strange Bedroom. The description of the white desk is "A white desk with a strange, modern look." The carrying capacity of the white desk is 6. Understand "strange" or "modern" as the white desk. Section - Strange Machine (Imp_Computer) [Note that, in the original source code, this object made use of the I6 'general' flag to track whether the player had answered the Y/N prompt displayed on the monitor. The implementation uses the more descriptive condition 'halted at prompt' to track this state. Also note that some logic built into the object's description property (in this case, a routine) is moved to rules here.] A strange machine is in Strange Bedroom. The strange machine can be halted at prompt. The strange machine is halted at prompt. The description of the strange machine is "It's a strange metal box. On top, perhaps connected in some way, is another metal box with a glass plate on the front. Unusual cords seem to be attached to the boxes somehow. In front of the boxes is an odd, flat, plastic object with rows and rows of buttons labeled every letter in the alphabet[if the strange machine is not halted at prompt]. The glass plate currently has glowing, colorful patterns displayed on it[end if]." Understand "computer" or "keyboard" or "buttons" or "rows" as the strange machine. An unimportant thing called a metal box is part of the strange machine. A glass plate and some unusual cords are unimportant things that are part of the strange machine. Before examining the strange machine during Coffee Quest (this is the Imp will intercept PC before he gets close to computer if not duped by decaf rule): say "You draw closer to the machine, fascinated, but your heart seizes as you hear the sound of rapid footsteps behind you.[paragraph break]"; sweep the Imp's apartment for intruders; stop the action. To have the strange machine go to screensaver mode: say "[line break]The strange box emits a tiny beep, and the glass plate is covered with fantastic, colorful designs." After examining the strange machine while the strange machine is halted at prompt (this is the a fateful intervention rule): say "Looking more closely, you notice curious, glowing letters on the glass plate. You read the letters, and feel drawn to respond...[paragraph break][fixed letter spacing]SPIRITWRAK DEVELOPMENT SYSTEM:[line break](AUTOMATIC OBJECT GARBAGE-COLLECTION)[line break]REMOVE OBJECT IMPENETRABLE_STEEL_WALL? (Y/N)"; if the player consents: remove the steel wall from play; now the mysterious passage is open; now the mysterious passage is described; accomplish heavenly-hacker; now the strange machine is not halted at prompt; say "[variable letter spacing][line break]You press a button labeled 'Y'."; the matrix is reconfigured in two turns from now; have the strange machine go to screensaver mode; otherwise: now the strange machine is not halted at prompt; say "[variable letter spacing][line break]You press a button labeled 'N'."; have the strange machine go to screensaver mode. [In the original, it seems like it was necessary to wake up the Implementor to return. Since this only gives the player time to wander around the relatively bare environment of the Celestial Apartment and try to think up mischief, this version accelerates the process after the player interacts with the computer.] At the time when the matrix is reconfigured: if the player is in Celestial Apartment: return the player to the proper plane, without dismissal. Chapter - Implementor (Imp) [Note that, in the original source code, this object made use of the I6 'general' flag to track whether or not the Implementor was awake. This implementation uses an 'awake'/'asleep' condition instead. In addition, this object made use of the I6 'daemon' property to trigger various resolutions of the Implementor's coffee quest. This logic, along with some from the original Imp_Liv ("Strange Room") object's I6 'before()' routine, has been restructured into a separate "coffee run" rulebook (next section), which is used in conjunction with the "Coffee Quest" scene to control the action. In addition, this object declared 'number' and 'weight' properties which were used to track various states related to the coffee switcheroo puzzle. The 'number' property indicated the number of turns and/or location that the Implementor had been out of the bedroom and the 'weight' property tracked whether and what kind of coffee had been obtained. These have been recast as various conditions of the Implementor and/or tests of world state to improve the clarity of rule preambles.] A man called an Implementor is in Strange Bedroom. The Implementor can be asleep or awake. The Implementor can be seeking coffee or working. The Implementor can be recharged or sluggish. The Implementor can be considering caffeine. The Implementor can be missing the coffee-maker. The Implementor can be missing coffee. The Implementor can be duped by decaf. The description of the Implementor is "Some Implementor. Looks more like a oddly-dressed young man badly in need of a haircut[if the Implementor is asleep]. He's sound asleep[end if]." Understand "imp" as the Implementor. Some disheveled hair is a mass-nouned thing part of the Implementor. The Implementor is awake and working and sluggish. [This is the default state, anyway, given how the properties are defined -- added for the sake of clarity to other authors.] Rule for writing a paragraph about the Implementor (this is the I6 describe equivalent for the Implementor rule): say "Someone whom you assume must be an Implementor is here[if the Implementor is asleep], sound asleep[end if]." To return the player to the proper plane, with dismissal or without dismissal: if with dismissal: say "'I'm afraid you'll have to go back.' The Implementor snaps his fingers, and suddenly, you're back in...[line break]"; if without dismissal: say "[if the player can see the strange machine]The machine beeps to itself, and y[else]Y[end if]our reality undergoes a severe discontinuity[if the player cannot see the strange machine], and your find yourself in[else][end if]..."; now the streaks of light are off-stage; disengage spell blocking; move the player to Atrii Eight. Instead of yelling when the player can see the asleep Implementor (this is the treat yelling around sleeping Imp as an attempt to wake him rule): try waking the Implementor instead. Instead of attacking or waking the Implementor while the Implementor is asleep (this is the let sleeping Imps lie rule): say "You manage to rouse the Implementor from his slumber. He stares at you, bewildered. 'What are you doing here?' he asks. "; return the player to the proper plane, with dismissal. [Note that the following rule reflects logic commented out in the original source code, since it should not be possible within the context of the game.] Instead of attacking the Implementor while the Implementor is awake (this is the imaginary Implementor interaction rule): say "Well, that got his attention. The Implementor looks completely startled. 'What are you doing here?' he says. "; return the player to the proper plane, with dismissal. This is the coder default life behavior rule: if the Implementor is asleep: say "He appears to be sound asleep right now, and isn't very responsive."; otherwise: say "The Implementor frowns, mumbling to himself that you seeing this message shouldn't really be possible." Instead of doing something when the current action is generic life behavior and the current action involves the Implementor (this is the Implementor generic life rule): abide by the coder default life behavior rule. Persuasion rule for asking the Implementor to try doing something (this is the reroute understood orders to coder to generic life response rule): consider the coder default life behavior rule; rule fails. Report the Implementor going (this is the report Imp's comings and goings rule): if the location is the room gone to: say "[one of]You quail as an Implementor [or]The Implementor [stopping]walks in from the [opposite of the noun]."; rule succeeds; [halt processing of report going rulebook] otherwise if the location is the room gone from: say "The Implementor leaves to the [noun]."; rule succeeds; [halt processing of report going rulebook] otherwise: do nothing. After the Implementor opening a door (called portal) (this is the indicate Imp's action on opening a door rule): if the Implementor can see the player: [i.e. in same room before going through, which shouldn't happen.] say "The Implementor opens [the portal]."; otherwise: if the player can see the portal: say "[The portal] opens[if the location is Strange Bedroom] again, sending a jolt of fear through your body[end if]."; otherwise: do nothing. After the Implementor opening a door (called portal) (this is the indicate Imp's action on closing a door rule): if the Implementor can see the player: say "The Implementor closes [the portal]."; otherwise: if the player can see the portal: say "[The portal] closes, shut by somebody on the other side."; otherwise: do nothing. Every turn when the player is in Celestial Apartment and the awake Implementor can see the player (this is the Implementor will banish PC if spotted before moving rule): sweep the Imp's apartment for intruders. [see next section for phrase definition] The Implementor will banish PC if spotted before moving rule is listed before the Coffee Quest scene drives coffee run rule in the every turn rules. [before moving check] Every turn when the player is in Celestial Apartment and the awake Implementor can see the player (this is the Implementor will banish PC if spotted after moving rule): sweep the Imp's apartment for intruders. [see next section for phrase definition] The Implementor will banish PC if spotted after moving rule is listed after the Coffee Quest scene drives coffee run rule in the every turn rules. [after moving check] Section - Coffee Run and Coffee-Making Rules [These rulebooks are intended to emulate the logic found primarily in the Implementor object's daemon() routine, but it has been significantly restructured to work as a collection of independent rules instead of one massive algorithm. Some logic from other objects has also been moved to these rules. Note that rule ordering must be enforced manually due to differing specificities of preambles. See WWI 18.18 for why default is not same order as source code. These rules aren't all that robust and depend on the PC not having time to do much during the Coffee Quest scene to ensure that the Implementor's implicit actions (like opening doors, taking cans, etc.) are viable. You will probably want to revisit them if you add things that could seal a door or prevent touching/taking an object, or if the geography of the Celestial Apartment is altered. Magic is normally disabled while the PC is here, so new spells shouldn't matter.] Coffee run is a rulebook. First Coffee run when the Implementor is considering caffeine and the Implementor is not seeking coffee (this is the not just considering caffeine now seeking it rule): [ say "(activating 'seeking coffee' mode)";] now the Implementor is not considering caffeine; now the Implementor is seeking coffee; if the location is Strange Room: say "There is the sound of more motion in the next room. Somebody getting up from a chair?"; rule succeeds. [halt evaluation of rulebook this turn] [Note that this logic is separated out to allow it to be triggered by other rules, if desired.] To sweep the Imp's apartment for intruders: [ say "(checking for non-hidden PC)";] if the player is in the closed curtains: do nothing; otherwise: if the player is in Strange Room and the Implementor is in Strange Bedroom and the plain-looking door is closed: say "The door to the west suddenly flies open! A somewhat bedraggled Implementor steps out! He spots you and his jaw drops. 'You, here?' he says. "; [space at end means paragraph continues] otherwise if the player is in Celestial Apartment: say "[if the Implementor is in the location]The Implementor [else]From nearby, an Implementor rushes up and [end if]grabs you by the shoulder. 'What are you doing here?' he says. "; [space at end intentional] return the player to the proper plane, with dismissal. Coffee run when the Implementor is seeking coffee and the Implementor is in Strange Bedroom (this is the Implementor exits the bedroom in search of coffee rule): [ say "(moving Imp to living room en route to kitchen)";] sweep the Imp's apartment for intruders; if the plain-looking door is closed and the player is in Celestial Apartment: say "You hear the sound of a door opening."; now the plain-looking door is open; try the Implementor going east; rule succeeds. [halt evaluation of rulebook] The Implementor exits the bedroom in search of coffee rule is listed after the not just considering caffeine now seeking it rule in the coffee run rules. Coffee run when the Implementor is seeking coffee and the Implementor is in Strange Room (this is the Implementor heads to the kitchen from the living room in search of coffee rule): [ say "(moving Imp to kitchen)";] try the Implementor going east; if the location is Strange Room: say "Someone is walking nearby. The footsteps soon fade to the east."; rule succeeds. [halt evaluation of rulebook] The Implementor heads to the kitchen from the living room in search of coffee rule is listed after the Implementor exits the bedroom in search of coffee rule in the coffee run rules. Coffee run when the Implementor is seeking coffee and the Implementor is in the Strange Kitchen (this is the Implementor tries to make coffee rule): [ say "(Imp attempting to make coffee)";] abide by the coffee-making rules. [may succeed or fail, either way halts evaluation of rulebook] The Implementor tries to make coffee rule is listed after the Implementor heads to the kitchen from the living room in search of coffee rule in the coffee run rules. Coffee run when the Implementor is working and the Implementor is in Strange Kitchen (this is the Imp heads back to the living room after getting a drink rule): [ say "(moving Imp to living room en route to bedroom)";] if the location is Strange Room and the player is in the curtains: say "Footsteps approach from the east, and momentarily pause."; try the Implementor going west; rule succeeds. [halt evaluation of rulebook] The Imp heads back to the living room after getting a drink rule is listed after the Implementor tries to make coffee rule in the coffee run rules. Coffee run when the Implementor is working and the Implementor is in Strange Room (this is the Imp returns to the bedroom after getting a drink rule): [ say "(moving Imp to bedroom, Coffee Quest should be ending)";] if the plain-looking door is closed: try the Implementor opening the plain-looking door; [to trigger description of door opening] try the Implementor going west; if the Implementor can see the player: say "The Implementor stares at you in disbelief from the doorway. 'You... you...' he stammers, then a light comes to his eyes. 'Oh! I see the bug now.' He reaches past you and taps on the strange machine.[paragraph break]"; return the player to the proper plane, without dismissal; otherwise: try the Implementor closing the plain-looking door; if the plain-looking door is closed and the player is in Celestial Apartment and the player cannot see the plain-looking door: say "You hear a door close to the [direction of the plain-looking door from the location]."; rule succeeds. [halt evaluation of rulebook] The Imp returns to the bedroom after getting a drink rule is listed after the Imp heads back to the living room after getting a drink rule in the coffee run rules. Coffee run when the Implementor is working and the Implementor is in Strange Bedroom (this is the Imp sleeps if coffee was sabotaged rule): if the Implementor is duped by decaf: now the Implementor is asleep; rule succeeds. [halt evaluation of rulebook] The Imp sleeps if coffee was sabotaged rule is listed after the Imp returns to the bedroom after getting a drink rule in the coffee run rules. Coffee-making is a rulebook. To overhear the Implementor getting iced tea instead: say "[line break]The voice continues. 'Good thing I bought that iced tea.' You hear the sound of a heavy door being opened then shut, a small 'pop!' and then the sound of drinking." First Coffee-making when the Implementor is seeking coffee and the Implementor is in Strange Kitchen and the curious machine is not in Strange Kitchen (this is the Imp can't find coffee maker rule): [attempt coffee making rule, 1 of 4] [ say "(coffee-making: Imp couldn't find coffee-maker)";] now the Implementor is missing the coffee-maker; now the Implementor is working; now the Implementor is recharged; if the location is Strange Room: say "The footsteps to the east stop, and there is a long pause of silence. A bewildered voice can be heard: 'Who the heck took my coffee maker?!'"; overhear the Implementor getting iced tea instead; rule fails. [halt evaluation of rulebook] To overhear the Implementor making coffee: [used in two following rules] if the location is Strange Room: say "You hear an assortment of sounds from the room to the east: whirring, clanging, gurgling, and the solid [']thunk['] of an empty metal can being discarded.[paragraph break]A strong but pleasant aroma fills the air. You hear a slight slurping sound, followed by a satisfied murmur: 'Mmmmmm. Rich, mountain-grown flavor.'" Coffee-making when the Implementor is seeking coffee and the Implementor is in Strange Kitchen and the can of regular coffee is in Strange Kitchen (this is the Imp prefers regular coffee when available rule): [attempt coffee making rule, 2 of 4] [ say "(coffee-making: Imp made regular coffee)";] remove the can of regular coffee from play; now the Implementor is recharged; now the Implementor is working; overhear the Implementor making coffee; rule succeeds. [halt evaluation of rulebook] The Imp prefers regular coffee when available rule is listed after the Imp can't find coffee maker rule in the coffee-making rules. Coffee-making when the Implementor is seeking coffee and the Implementor is in Strange Kitchen and the can of decaf coffee is in Strange Kitchen (this is the Imp too tired to notice he's making decaf rule): [attempt coffee making rule, 3 of 4] [ say "(coffee-making: Imp made DECAF coffee)";] remove the can of decaf coffee from play; now the Implementor is duped by decaf; now the Implementor is working; overhear the Implementor making coffee; rule succeeds. [halt evaluation of rulebook] The Imp too tired to notice he's making decaf rule is listed after the Imp prefers regular coffee when available rule in the coffee-making rules. Coffee-making when the Implementor is seeking coffee and the Implementor is in the Strange Kitchen (this is the Imp can't find coffee rule): [attempt coffee making rule, 4 of 4] [ say "(coffee-making: Imp could not find coffee)";] now the Implementor is missing coffee; now the Implementor is working; now the Implementor is recharged; if the location is Strange Room: say "A petulant voice emerges from the room to the east. 'Hey! Where'd all the coffee go?'"; overhear the Implementor getting iced tea instead; rule fails. [halt evaluation of rulebook] The Imp can't find coffee rule is listed after the Imp too tired to notice he's making decaf rule in the coffee-making rules. Part - Special Locations, Endgame [SPECIAL.INF] Chapter - Mystical Cave (Mystical_Cave) [Note that, in the original source code, this object has a 'number' property that is used to count the number of true rod pieces successfully planted in the past during the endgame. This implementation tracks that state via conclusion of various scenes, with appropriate changes to logic. Also note that the room synonym "crystal" found in the original source code is ignored here, as the original descriptions make it more likely that a player would use it to refer to the crystal sphere.] There is a room called Mystical Cave. "You've entered a wondrous natural cave, lit everywhere by reflected light from a purple, crystalline substance in the walls. A [if the mysterious passage is sealed by cave-in]collapsed [end if]tunnel [if the mysterious passage is not sealed by cave-in]exits[else]spills rubble[end if] to the northwest." Some reflected light and a crystalline substance are unimportant scenery in Mystical Cave. The reflected light is mass-nouned. Understand "purple" as the crystalline substance. To decide if the true rods have not been planted successfully: if Planting the Red Rod Piece has ended and Planting the Green Rod Piece has ended and Planting the Brown Rod Piece has ended and Planting the Silver Rod Piece has ended: decide no; otherwise: decide yes. Instead of going northwest from Mystical Cave when the true rods have not been planted successfully (this is the can't proceed until planting all real rods rule): say "The purple light in the chamber swells with energy, and you find your way blocked by an invisible force." After going northwest from Mystical Cave (this is the trigger cave-in when proceeding rule): disengage spell blocking; now the mysterious passage is sealed by cave-in; say "As you leave, a sudden tremor shakes the cave! You narrowly avoid a cave-in behind you."; continue the action. Section - Crystal Sphere (purple_sphere) [Note the name change to try to avoid parser difficulty around the existence of hue "purple". Also note that the logic associated with this object's I6 'before()' rule in the original source code has been substantially revised here to use I7's scene functionality. See the various key scenes named "Planting the Silver Rod Piece," "Planting the Green Rod Piece," etc. for details.] A fixed in place thing called a crystal sphere is in Mystical Cave. "A crystal sphere, of the same purple hue, is partially embedded in the rock floor here." The description of the crystal sphere is "A large purple sphere that pulses with dark energy." Understand "purple" as the crystal sphere. [Note the additional hinting that this interference is location-specific, compared to the original.] Instead of joining a real rod to a real rod when the crystal sphere is at hand (this is the crystal sphere prevents joining of real rods rule): now the second noun is in the location; say "As the two rods near each other, the crystal sphere sings a rising note. A bolt of energy leaps from it, sending [the second noun] spinning away." Touching the crystal sphere is time-travel triggering behavior. Rubbing the crystal sphere is time-travel triggering behavior. [The original code specified the same logic in response to the I6 Push, Touch, and Rub actions. Since pushing fixed in place things is blocked by default in I7, the following rule translates the users command for pushing (and other interactions requiring touch) to touching.] Instead of pushing or pulling or turning or taking the crystal sphere (this is the translate tactile interaction with the sphere into touching it rule): try touching the crystal sphere instead. To dump the player's possessions near the crystal sphere: now everything that is left behind when transported is in the location of the crystal sphere. To announce the time travel sequence: say "The sphere pulses with angry energy. It seems to be fighting [the random rod carried by the player] you possess. With a sudden burst, you feel your mind reel and your surroundings change!" After time-travel triggering behavior (this is the it's late and this little joke appeals to me rule): if the player does not bear a real rod: say "A [one of]violent[or]violet[purely at random] blast of force throws you back!"; otherwise: let kept rod be a random real rod born by the player; if the kept rod is carried by the player: say "The sphere pulses with angry energy. It seems to be fighting [the kept rod] you hold, and everything except it fades away. "; otherwise: say "Waves of angry energy enfold you. Everything you possess, including [the random thing carried by the player that encloses the kept rod] seems to fade away, leaving only [the kept rod] in your hands. "; say "With a staggering burst, you feel your mind reel and your surroundings change!"; dump the player's possessions near the crystal sphere; now the player carries the kept rod. Section - Skeleton (skeleton) [Note that the original version's logic for this object includes an I6 Before() routine for the I6 Kiss action, which would cause the skeleton to disintegrate. This does not function in the original, as the default I6 grammar lines prevent the player from generating a Kiss action since the noun tokens for the grammar lines specify an animate target. The same constraint applies within 6G60. While it would be a simple job to modify the kissing action to allow kissing inanimate objects, the simpler (and probably smarter) approach is to simply leave out this particular portion of the functionality apparently planned by Mr. Yu.] A fixed in place thing called a skeleton is in Mystical Cave. "Lying in one corner of the room is a skeleton." The description of the skeleton is "Just some bones, not much else, is all." Understand "bones" or "remains" or "Palemon" or "Palemon's" as the skeleton. To crumble the skeleton: remove the skeleton from play; say "The skeleton crumbles into dust, as though many years of time had suddenly caught up with it in one moment." Instead of pulling or pushing or turning or touching or attacking or rubbing or cutting or shaking or squeezing the skeleton (this is the skeleton has little structural integrity rule): crumble the skeleton. Instead of throwing something at the skeleton (this is the skeleton is not bulletproof rule): crumble the skeleton. Section - Blackened Parchment (p8) [Note that implicit underlining in the original source text has been converted to bold type here as in similar situations.] A parchment called a blackened parchment is in Mystical Cave. The description of the blackened parchment is "'I write these final words not in the hope that others will find and heed them, for this is too great a hope in my moment of death, but rather, to try to maintain my mind and soul in the face of the terror I now know is the truth.[paragraph break]For how can a man survive, knowing that his entire life, his entire belief, has been a ruse, a dupe, from its early beginning? That he has merely been a pawn in a working of evil that cannot be stopped?[paragraph break]I have fought all manner of terrors, and recovered that which I know is the [bold type]true[roman type] Rod of the Ancients, broken and scattered eons ago in the face of great evil. I sought also those ancient spheres that the Four Ancients never had the chance to use against the evil four elemental demons, but alas, I could not find them all, and sequestered those which I did with good people that the elemental evil could not touch.[paragraph break]My quest has ended in defeat. I lie trapped here, the pieces of the true Rod in hand, unable to go forward -- held back by mystical locks that prevent any part of the Rod from leaving this room. Yet I am also unable to go back -- to abandon my quest, to deny the truth of the defeat of the Ancients, to ignore the very real danger of the power that the evil elementals hold.[paragraph break]What is a faith destroyed? Who can help me to believe, in my moment of disbelief?[paragraph break]--P--'". Section - Silver Rod Piece (silver_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A real rod called a silver rod piece is in Mystical Cave. The color of the silver rod piece is "silver". Section - Red Rod Piece (red_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A real rod called a red rod piece is in Mystical Cave. The color of the red rod piece is "red". Section - Green Rod Piece (green_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A real rod called a green rod piece is in Mystical Cave. The color of the green rod piece is "green". Section - Brown Rod Piece (brown_rod_piece) [Note that some of the logic associated with this object in the original source code has been moved to rules about the rod class in this implementation. See "Rod" under "New Kinds".] A real rod called a brown rod piece is in Mystical Cave. The color of the brown rod piece is "brown". Section - Golden Rod (TRUEROD) [Note that, in the original source code, this object made use of the I6 'number' property to track the number of successfully-joined true rod pieces. This implementation tracks the state by making the joined rod pieces concealed parts of the golden rod, so all logic associated with the original 'number' is modified appropriately.] There is a real rod called a golden rod. The description of the golden rod is "A wondrous, shimmering golden rod[if the golden rod is not completed]. Studying it, you sense that it is not yet complete[end if]." Understand "gold" as the golden rod. Rule for deciding the concealed possessions of the golden rod: decide yes. [Note: See section on the "Rod" kind for definition of completed/incomplete.] After joining the golden rod to a real rod (this is the build Rod of the Ancients from real rod pieces rule): now the second noun is part of the golden rod; say "You feel a violent surge of mystical energy as you join the rod pieces. The golden rod absorbs [the second noun], growing in length."; if the golden rod is completed: accomplish rodmaster; say "[line break]Time and space seem to grind to a halt.[paragraph break]Your surroundings and even the ground on which you stand shatter like panes of glass, revealing a strange, new dimension...[line break]"; engage spell blocking; now the player is in Nothingness. After waving the incomplete golden rod (this is the cruel misdirection about use of the rod rule): say "[The golden rod] thrums with power." After waving the completed golden rod (this is the rods are not quite the same as wands rule): say "You wave the rod, which emits an intense blast of force! [if at least two evil elementals are at hand]The spheres howl in terror and explode. [end if][if exactly one evil elemental is at hand]The sphere howls in terror and explodes. [end if][paragraph break]The jolt of power from the rod sends you hurtling [if the location is Nothingness]through space[else]out of the universe as you know it[end if], and you are lost in an endless tumble through the void..."; end the game in death. Chapter - Giant Cavern (Dragon_Cave) [Note that, unlike the original version, this implementation situates this room above Snowy Intersection. Also note that the logic is modified to offer somewhat greater consistency in how different methods of exiting the cavern are explored.] There is a room called Giant Cavern above Snowy Intersection. "You find yourself in a huge cavern. To the west is a large exit that looks out into an expanse of snow-covered mountains." Giant Cavern can be primed for cliff-jumping. Some snow-covered mountains are unimportant scenery in Giant Cavern. Instead of going nowhere in Giant Cavern when the noun is west (this is the this isn't your typical exit rule): unless Giant Cavern is primed for cliff-jumping: now Giant Cavern is primed for cliff-jumping; say "You hesitate. The cave's mouth seems to open to empty air, high in the side of a mountain, and all you can see below is whiteness. It could be a long way down."; otherwise: try jumping instead. Instead of going down from Giant Cavern (this is the interpret going down as jumping from Giant Cavern rule): unless Giant Cavern is primed for cliff-jumping: now Giant Cavern is primed for cliff-jumping; say "There's nothing even resembling a proper foothold on the sheer cliff face below the cave's mouth, just a yawning void from here to the snow below. You wonder which would be swifter and more painless: death by dragon or death by catastrophic fall."; otherwise: say "You decide to take your chances with the dangerous descent. Within moments, your grip on the treacherously icy rock slips! [run paragraph on]"; follow the survive the dragon jump rule. Instead of going nowhere in Giant Cavern when the noun is outside (this is the interpret going out as jumping from Giant Cavern rule): try going west instead. Instead of exiting in Giant Cavern (this is the interpret exiting Giant Cavern as going outside rule): try going outside instead. After jumping in Giant Cavern (this is the a leap into the unknown rule): say "Closing your eyes, you leap out of the cave! [run paragraph on]"; follow the survive the dragon jump rule. This is the survive the dragon jump rule: say "You plummet through silent white winds. Moments later, you fall right into an enormous snowbank, and roll downward, into...[line break]"; move the player to Snowy Intersection. Section - White Dragon (White_Dragon) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether the dragon was sleeping (set = sleeping, unset = awake). Here a more descriptive 'awake'/'asleep' condition is used in its place. Notably, the object is not declared with the general flag set, and it's not clear when or where it would be set. In addition, playtesting release 3/960606 shows that the dragon's initial appearance indicates that it is not treated as asleep. Since the logic of the dragon's time_out() routine implies that the dragon wakes up, and since the timer is set shortly before the player is moved there by the crystal sphere, it is assumed in this implementation that the dragon starts out asleep, and the state is modified as needed.] An animal called a white dragon is in Giant Cavern. The dragon can be asleep or awake. The dragon is asleep. The initial appearance of the dragon is "There is a gigantic white dragon here[if the white dragon is asleep], sleeping peacefully[end if]." The description of the white dragon is "A giant white dragon, the size of a small house." Understand "giant" or "gigantic" as the white dragon. At the time when the sleeping dragon wakes: now the white dragon is awake. Every turn when the white dragon is awake and the stone marker is not damaged during Planting the Silver Rod Piece (this is the dragon does what dragons do rule): if the player can see the white dragon: say "The dragon suddenly snorts and wakes! It sees you and immediately attacks. In moments, you are no more..."; end the game in death; otherwise: now the stone marker is damaged; now the broken stone top is in Snowy Intersection; remove the white dragon from play; if the location is Snowy Intersection: say "You hear a roar from the east![paragraph break]From out of the sky, a giant white dragon descends. It draws near, spots you, and bellows in rage.[paragraph break]You shrink back, praying for a quick but painless end. As you close your eyes, there is a loud 'crack!' The dragon, in trying to land, almost impales itself on the obelisk.[paragraph break]Part of the marker breaks off, and the dragon flies away, whimpering in pain." To disturb the sleeping dragon: say "You disturb the sleeping dragon, who promptly makes you wish you hadn't."; end the game in death. Instead of attacking or waking the dragon (this is the let sleeping dragons lie rule): disturb the sleeping dragon. Instead of throwing something at the dragon (this is the it's not David vs Goliath here rule): disturb the sleeping dragon. This is the dragon default life behavior rule: say "Best not to disturb the dragon, I'd guess." Instead of doing something when the current action is generic life behavior and the current action involves the white dragon (this is the white dragon generic life rule): abide by the dragon default life behavior rule. Persuasion rule for asking the dragon to try doing something (this is the reroute understood orders to dragon to generic life response rule): consider the dragon default life behavior rule; rule fails. Chapter - Riding The Waves (On_Boat) [Note that the original version of this object had several words related to the ship and sea set as room synonyms. Some universal backdrops are used for the Great Sea here.] There is a room called Riding The Waves. "You are on a long, open boat, riding the waves of some great sea. The boat is filled with sailors from a militia." The printed name of Riding The Waves is "On strange boat". A ship is unimportant scenery in Riding The Waves. Understand "floorboards" or "boat" as the ship. The Great Sea is in Riding The Waves. [See "Swank Waterfront" for declaration of this backdrop.] At the time when the ship founders: if the player is in Riding The Waves: say "The ship breaks asunder! Sailors scramble madly and fall into the violent waves. You hear the captain scream 'Blast! I can't swim!' before the waters cover you completely."; end the game in death; otherwise: do nothing. After dropping the green rod piece in Riding The Waves while the sailors are not immobilizing the PC (this is the what an unlikely stroke of fortune rule): say "You drop the green rod and watch it roll near the mast, where it gets momentarily stuck in the floorboards." Section - Mast [Note that the mast does not appear in the original. It is added here to allow a slightly more realistic (and perhaps intuitive) solution than simply dropping the green rod amidst the chaos.] A scenery closed unopenable container called a mast is part of the ship. The mast can be splintered. The description of the mast is "[if the mast is not splintered]Tall and true, it is both pitted by exposure at sea and polished by years of meticulous -- if not exactly loving -- care[else]The mast is broken, and a deep split has revealed a narrow hollow in its core[end if]." The carrying capacity of the mast is 1. The size of the mast is 10. Understand "narrow" or "hollow" or "broken" or "deep" or "split" or "core" as the mast when the mast is splintered. [The following rule is a little experiment in using the phrasing from the 6G60 Standard Rules' "can't insert into what's not a container rule" to invoke the underlying I6 library message.] Check inserting something into the mast when the mast is not splintered (this is the pretend mast is not a container when it's not splintered rule): stop the action with library message inserting it into action number 2 for the second noun. Check inserting something that is not a rod into the mast when the mast is splintered (this is the only very narrow things will fit into the mast rule): say "[The noun] is too wide to fit into the hollow core of the mast."; rule fails. After inserting a rod into the mast (this is the splintered mast can conceal rods rule): say "[The noun] slides neatly into the hollow core, disappearing from view." Section - Sails Some sails are part of the ship. The sails can be fallen. The description of the sails is "[if the sails are not fallen]Massive sheets of billowing, white canvas[else]The sails flap from the broken mast, interfering with the sailors and adding to the chaos on deck[end if]." Understand "massive" or "sheets" or "canvas" as the sails. Section - Sailors (militia) [Note that, in the original source code, this object included an I6 'time_out()' function (and accompanying time_left property) to trigger the foundering of the ship after the player successfully guessed the password. Since no direct equivalent to the I6 timer function exists in I7, here every turn rules are used instead, and the logic is moved to the chapter for the "Riding The Waves" immediately above. Also note that some of the logic associated with states of the sea captain object in the original have been relocated to here, for ease of maintenance if there are changes. The property "immobilizing the PC" has been added to allow this.] Some sailors are scenery people in Riding The Waves. The sailors can be immobilizing the PC. The description of the sailors is "A bunch of dour-looking navy sailors." Understand "dour" or "dour-looking" or "navy" or "militia" or "bunch" or "bunch of" as the sailors. Instead of dropping something when the sailors are at hand and the sailors are immobilizing the PC (this is the can't drop things when held by sailors rule): say "The sailors are holding you fast, so you can't do this at the moment." To indicate the limited range of options in the situation: say "Given that you are in the grips of several strong navy sailors, this is impossible." Instead of attacking or kissing the captain when the sailors are at hand and the sailors are immobilizing the PC (this is the can't attack or kiss captain during challenge rule): indicate the limited range of options in the situation. Instead of throwing something at the captain when the sailors are at hand and the sailors are immobilizing the PC (this is the can't throw things at captain during challenge rule): indicate the limited range of options in the situation. Instead of showing something to the captain when the sailors are at hand and the sailors are immobilizing the PC (this is the can't show things to captain during challenge rule): indicate the limited range of options in the situation. Instead of giving something to the captain when the sailors are at hand and the sailors are immobilizing the PC (this is the can't give things to captain during challenge rule): indicate the limited range of options in the situation. Every turn when the sailors are at hand and the captain is at hand and the captain was at the helm (this is the life as a sailor is nasty brutish and short rule): say "[one of]The sailors desperately battle to free the ship as the waves batter it against the reef.[or]There is a tremendous groaning sound from below. The stricken glances of the crew confirm your fear that the end is nigh.[stopping]" Section - Captain (captain) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether the player has satisfied the captain's challenge/triggered the reef collision. In this implementation, the more descriptive property 'at the helm' is used to similar effect. Likewise, the object included a 'number' property used as a flag to track when the password challenge is issued. Here, it is replaced with the more descriptive property 'issuing a challenge'. This object also included an I6 'time_out()' function (and accompanying time_left property) to trigger the tossing of the PC overboard if no correct response is offered to the password challenge. Here a scheduled event ("the time when the captain's patience runs out") is used to similar effect.] A man called a captain is in Riding The Waves. The captain can be at the helm. The captain can be issuing a challenge. The description of the captain is "A rough-looking navy captain." Understand "rough-looking" or "sea captain" or "navy captain" as the captain. The captain carries a thing called a cutlass. The description of the cutlass is "[if the captain is issuing a challenge]Sharp, and entirely too close to important blood vessels[else]The captain's cutlass waves wildly as he barks urgent orders to the crew[end if]." Understand "sword" as the cutlass. At the time when the captain's patience runs out: if the captain is issuing a challenge: say "'Into the water with ye, then,' he says, and the two sailors push you roughly overboard.[paragraph break]You land in the sea with a splash, and struggle to stay afloat. The ship sails off, but oddly, minutes later, it seems to stall and start to sink! Before you get a chance to reflect on whether or not this counts as poetic justice, a large grouper swallows you whole."; end the game in death. First check sailing when the captain is at hand (this is the not on my ship mister rule): say "I think [the captain] is in charge, here." instead. Instead of answering the captain that "duncanthrax" when the captain is issuing a challenge (this is the incorrect but you win a free beheading rule): say "The sailors visibly pale at the mention of Lord Duncanthrax. 'A traitor in our midst, eh?' the captain shouts. He draws his sword and beheads you with one stroke."; end the game in death. Instead of answering the captain that "ulysses/odysseus" when the captain is issuing a challenge (this is the incorrect but please try again rule): say "'Nay, lad, me thinks that was a sailor.'" Instead of answering the captain that "mulva" when the captain is issuing a challenge (this is the why the hell not allow a Seinfeld joke rule): say "The captain can't hold back a short, barking laugh. 'I once knew a lass with that name, but she was no goddess.'" Instead of answering the captain that "minirva" when the captain is issuing a challenge (this is the however did you guess rule): now the captain is not issuing a challenge; now the mast is splintered; now the mast is open; now the sails are fallen; now the sailors are not immobilizing the PC; now the captain is at the helm; the ship founders in two turns from now; say "'Aye, that's right. Escort the new scullion down to the hold where --'[paragraph break]The captain's orders are cut short by a sudden grinding noise, and the boat rocks violently! 'Reef, captain!' you hear someone cry. 'Blast!' the captain says, 'Quickly, men!, We've got to --'[paragraph break]But it's too late. The boat starts to tip and sway, and with a tremendous, splintering racket, the mast splits near its base. The two sailors release you, running to help the rest of the crew." Instead of answering the captain that something when the captain is issuing a challenge (this is the generic response to incorrect guesses rule): say "[one of]'Nay, lad, that doesn't sound right.'[or]The captain's eyes narrow. 'Ye'd [if the player has been in Riding The Waves for three turns]need to have done better than that, lad, if ye wished[else]best do better than that, lad, if ye wish[end if] to see the sunset.'[or]The captain's jaw tightens. 'Ye've had more chances than ye deserve, lad, and I'll give ye nay more.'[stopping]". [remember to match variations to patience running out, if the duration of the captain's challenge is changed from 3 turns] This is the captain default life behavior rule: if the captain is at the helm: say "The captain's a bit too busy trying to save a sinking ship."; otherwise if the captain is not at the helm and the captain is issuing a challenge: say "Perhaps you should be trying to come up with a password, instead."; otherwise: say "The captain curses under his breath about 'damned beta testers,' but otherwise ignores you." Instead of doing something when the current action is generic life behavior and the current action involves the captain (this is the captain generic life rule): abide by the captain default life behavior rule. Persuasion rule for asking the captain to try doing something (this is the reroute understood orders to captain to generic life response rule): consider the captain default life behavior rule; rule fails. Every turn when the captain is at hand and the captain is not at the helm and the captain is not issuing a challenge (this is the welcome to this man's navy rule): now the sailors are immobilizing the PC; now the captain is issuing a challenge; say "You suddenly realize that you are being held fast by two navy sailors. The captain walks forward and points his cutlass near your ear.[paragraph break]'What we have here, lads, is a stowaway.' Some sailor cries out 'Overboard with the stowaway!' The captain smiles. 'Now, we was planning on feeding ye to the groupers, but we could use a scullion in the hold. One thing's for sure, ye ain't finding passage on this ship if ye ain't aligned with the Antharian Navy cause.' Some sailor cries out (unnecessarily) 'The Antharian Navy cause!'. 'So, tell us lad, are ye with us? If ye are true, ye'll tell me the Antharian Navy's patron saint. Speak quickly, lad, if ye wish to stay dry!'" Every turn when the captain is at hand and the captain is not at the helm and the captain was issuing a challenge and the current action is not answering the captain that something (this is the urge a quick response to the password challenge rule): [Note the use of 'was' vs. 'is' to prevent firing same turn as initial challenge] say "[one of]The captain's smile becomes ever-so-slightly icier. [if the player has been in Riding The Waves for three turns]'Quiet at the end, eh?'[else]'Speak up, fellow! We haven't got all day.'[end if][or]The captain's smile become downright malevolent. 'Ye test my patience, boy, but not for long.'[or]The captain sighs.[stopping]". [remember to match variations to patience running out, if not 3 turns] Chapter - Nothingness (ENDGAME_ROOM) There is a room called Nothingness. "Nothingness surrounds you. Yet, you feel like your conscious being extends into worlds and dimensions never imagined. You float in a void of total being." [Note that the following rule is derived from the I6 'each_turn' routine of this object, but it differs in that 1) the relevant messages are distributed to the various evil elementals, 2) the order of temptation is randomized, and 3) there is no need to check whether the evil elemental is present, since one in the location will always be selected.] Every turn when the player is in Nothingness and a waiting to tempt evil elemental is at hand (this is the temptation of evil rule): let speaking sphere be a random waiting to tempt at hand evil elemental; say the temptation message of the speaking sphere; now the speaking sphere is not waiting to tempt. Every turn when the player has been in Nothingness for twelve turns (this is the don't dally in defeating evil rule): if the number of at hand evil elementals is at least two: say "The spheres nearby suddenly converge "; otherwise: say "The [random at hand evil elemental] rushes "; say " toward you. In your mind, you hear 'Hesitation, foolish priest, was the downfall of the Ancient Ones!'[paragraph break]You are engulfed in a maelstrom of power that shreds your body into innumerably small particles dispersing slowly throughout the void."; end the game in death. Every turn when there are no evil elementals in Nothingness (this is the player wins the game rule): accomplish saving-the-day; say "The rage-filled howl of the final sphere echoes alarmingly in your mind. You scream in agony as the void that surrounds you seems to implode![paragraph break]You feel yourself dissipating into the surrounding nothingness. 'Is this my reward?' you cry, 'Is this, then, the end?'[paragraph break]A white light makes you open your eyes.[paragraph break]You are lying on a beach. The Great Sea laps at your tattered garments. Slowly, you rise to your knees.[paragraph break]The sun, like an expansive, radiant bird, is sinking below the waves on the horizon. Another day is coming to an end.[paragraph break]A voice startles you. '[']Tis a fine spot for watching sunsets.' You turn to see Morgan the Ranger, Frobar and the Thief nearby.[paragraph break]The Thief helps you to your feet, and Frobar glances your way. 'I sensed a great upheaval in the fabric of time and space not long ago. I gather you have quite a story to tell,' he says. 'We probably can relate to much of what you have seen, although your unwavering faith is something we desire to understand.' Morgan explains, 'Belief in the face of the unbelievable is an enviable strength.'[paragraph break]The Thief chuckles quietly. 'Perhaps you will join us at Delbin's, where we will partake in a belief of fine cuisine while you tell all?' he says. He notices your weary expression and adds with surprising seriousness, 'Not that I propose to offer advice from one such as I, but humbly, I admit, that many a time, a belief in myself was often sufficient.' He pauses. 'Gods or no, now, you make your own destiny.'"; end the game in victory. Section - Void (ENDGAME_timer) [Note that, in the original source code, this object served several purposes: a) it was a backdrop, b) it used a 'number' property to track which elemental would try to tempt the player, and c) it served as a timer to trigger a loss if the player has not defeated the elementals within a dozen turns. The logic for purposes b and c above have been relocated to rules associated with the "Nothingness" room above.] A void is scenery in Nothingness. The description of the void is "The absence of anything. Yet, at the same time, the sense that everything possible is near." Understand "nothingness" as the void. Section - Black Sphere (black_elemental) [Note that this and the other spheres in the room had substantially similar messages and behaviors, so an "evil elemental" kind is created for them in this implementation. See "New Kinds/Evil Elemental" for details. Interestingly, this particular sphere of energy is given the name Anabais, and "to do" comments in the other spheres of energy imply that given names were originally intended for all of them, as well.] An evil elemental called a black sphere is in Nothingness. The energy color of the black sphere is "black". The antisphere of the black sphere is the brown sphere. The engulfment destination of the black sphere is Bad End Two. The temptation message of the black sphere is "Echoing in your mind, you hear a voice, which you somehow know is from the black sphere. 'Give me the rod priest, and you shall be immortalized as a symbol to an entire civilization!'[line break]". The dissolution message of the black sphere is "[The second noun] tries to dodge, but [the noun] zips unerringly towards its target and pierces [the second noun]'s shell. For a moment, it seems as though nothing further will happen, then your mind is filled with a mental shriek of despair as [the second noun] implodes within itself, vanishing utterly." Understand "earth" or "anabais" as the black sphere. Section - Smoke-Filled Sphere (smoke_elemental) [Note that this and the other spheres in the room had substantially similar messages and behaviors, so an "evil elemental" kind is created for them in this implementation. See "New Kinds/Evil Elemental" for details.] An evil elemental called a smoke-filled sphere is in Nothingness. The energy color of the smoke-filled sphere is "smoke-filled". The antisphere of the smoke-filled sphere is the red sphere. The engulfment destination of the smoke-filled sphere is Bad End One. The temptation message of the smoke-filled sphere is "Echoing in your mind, you hear a voice, which you somehow know is from the smoke-colored sphere. 'Give me the rod priest, and I shall let you be witness to a feat of great magic, never before witnessed!'[line break]". The dissolution message of the smoke-filled sphere is "[The second noun] blasts [the noun] with a bolt of energy, but [the noun] is not deflected. It flares with actinic light as it strikes [the second noun], and they both explode in a starburst of [color of the noun] luminescence." Understand "smoke" or "fire" as the smoke-filled sphere. Section - Gray Sphere (gray_elemental) [Note that this and the other spheres in the room had substantially similar messages and behaviors, so an "evil elemental" kind is created for them in this implementation. See "New Kinds/Evil Elemental" for details.] An evil elemental called a gray sphere is in Nothingness. The energy color of the gray sphere is "gray". The antisphere of the gray sphere is the green sphere. The engulfment destination of the gray sphere is Dark Damp Cave. The temptation message of the gray sphere is "Echoing in your mind, you hear a voice, which you somehow know is from the gray sphere. 'Give me the rod priest, and I will grant you power over all who surround you!'[line break]". Understand "water" as the gray sphere. [The following rules handle a non-standard behavior for this sphere that is not covered by the kind's rules. The "continue the action" lets rule processing continue on to trigger additional generic rules for the "evil elemental" kind.] Instead of throwing the golden rod at the gray sphere (this is the special action for gray elemental when throwing true rod rule): the hermit grows worshipful in three turns from now; continue the action. The special action for gray elemental when throwing true rod rule is listed before the shouldn't give the true rod to the bad guys rule in the instead rules. Instead of giving the golden rod to the gray sphere (this is the special action for gray elemental when giving true rod rule): the hermit grows worshipful in three turns from now; continue the action. The special action for gray elemental when giving true rod rule is listed before the treat throwing the true rod at the bad guys as giving it to them rule in the instead rules. Section - White Sphere (white_elemental) [Note that this and the other spheres in the room had substantially similar messages and behaviors, so an "evil elemental" kind is created for them in this implementation. See "New Kinds/Evil Elemental" for details.] An evil elemental called a white sphere is in Nothingness. The energy color of the white sphere is "white". The antisphere of the white sphere is the silver sphere. The engulfment destination of the white sphere is Secret Trophy Room. The temptation message of the white sphere is "Echoing in your mind, you hear a voice, that you somehow know is from the white sphere. 'Give me the rod priest, and you will gain the attention of one of the more powerful figures of your time!'[line break]". Understand "air" as the white sphere. Chapter - Bad End One (badend1) There is a room called Bad End One. "You stand on a single ,giant, floating white cube, in the middle of a dimly lit cavern." The printed name of Bad End One is "On Giant Cube". Section - Newt An animal called a newt is in Bad End One. "A small newt floats nearby, concentrating on something." Understand "Barsap" as the newt. Every turn when the player can see the newt (this is the do newt disturb rule): say "The newt suddenly opens its eyes. 'What?' it croaks in surprise. 'Who are you? You've broken my concentration on the spell, you fool!' the newt exclaims.[paragraph break]You feel the cube shift, then start to drop! You plummet into the lava you feared was below..."; end the game in death. Chapter - Bad End Two (badend2) There is a room called Bad End Two. "You are on top of a pyramid in a vast city. You see dense jungle to the horizon. An ancient civilization spreads before you, in all its mysterious glory." The printed name of Bad End Two is "Top of Pyramid". Section - Robed Figures Some people called some robed figures are in Bad End Two. "Several robed figures surround you." Every turn when the player can see the robed figures (this is the guy in the carvings thanks you for taking his place rule): say "Suddenly, you realize you are tightly bound! One of the figures points towards the horizon and makes a complicated gesture. In a language you do not understand, he seems to make a prayer to a nameless god.[paragraph break]Fearing the inevitable, you struggle mightily, but to no avail. In moments, the group of robed figures hurls you off the pyramid to your death!"; end the game in death. Part - Great Underground Subway [SUBWAY.INF] [Everything about the subway system in the original source code was very "brittle," i.e. featuring lots of hardcoded behavior. For this implementation, the goal is to add some extensibility and/or plasticity to the structure, so that new stops can be added or routes changed with relatively little work. A "subway line" is essentially a route connecting multiple locations, taking the form of a list of rooms. They are assumed to be bi-directional, with each direction being "opposite" the other (i.e. north-south, east-west, etc.) The code assumes that the last room in the line route is the furthest in the initial route heading direction; upon reaching it, the subway will flip directions and move back to its starting point before commencing the cycle again.] Chapter - Special-Purpose Relations Section - Route-Following Route-following relates one subway car to one subway line. The verb to travel (he travels, they travel, it traveled, it is traveled, he is traveling) implies the route-following relation. Section - Standing In For Standing in for relates one subway train proxy (called the stand-in) to one subway car. The verb to stand in for (he stands in for, they stand in for, it stood in for, it is stood in for, it is standing in for) implies the standing in for relation. Section - Route-stopping Route-stopping relates one subway car (called the servicing train) to various GUS Train Platforms. The verb to stop at (he stops at, they stop at, it stopped at, it is stopped at by, it is stopping at) implies the route-stopping relation. Section - Adjoining Adjoining relates one GUS Station (called the antechamber) to various GUS Train Platforms. The verb to be the exodus of implies the adjoining relation. Chapter - Subway Transit Rules Section - First and Last Stops To decide which room is the first stop of (L - a subway line): decide on entry 1 of the line route of L. To decide which room is the last stop of (L - a subway line): let k be the number of entries in the line route of L; decide on entry k of the line route of L. Section - Next and Previous Route Stops [Note that this these procedures are not error-resistant in cases where the route is empty, the route is one room long, or there are duplicate entries.] To decide which room is the next route stop of (C - a subway car): let R be the location of a random subway train proxy standing in for C; let L be the line route of a random subway line traveled by C; while entry 1 of L is not R: rotate L backwards; decide on entry 2 of L. To decide which room is the previous route stop of (C - a subway car): let R be the location of a random subway train proxy standing in for C; let L be the line route of a random subway line traveled by C; let N be the number of entries in L; while entry 1 of L is not R: rotate L; decide on entry N of L. Section - Next and Previous Actual Stops To decide which room is the next actual stop of (C - a subway car): let R be the location of a random subway train proxy standing in for C; let L be a random subway line traveled by C; if the current heading of C is the route heading of L: decide on the next route stop of C; otherwise: decide on the previous route stop of C. To decide which room is the previous actual stop of (C - a subway car): let R be the location of a random subway train proxy standing in for C; let L be a random subway line traveled by C; if the current heading of C is the route heading of L: decide on the previous route stop of C; otherwise: decide on the next route stop of C. Section - Earlier and Later Stops To decide what number is the stop number of (S - a GUS Train Platform): let C be the servicing train of S; let L be a random subway line traveled by C; let T be the line route of L; let n be the number of entries in T; repeat with i running from 1 to n: if S is entry i of T: decide on i; decide on 0. [Note that the following procedures are not error resistant to being used with stops on different lines!] To decide whether (S1 - a GUS Train Platform) is an earlier stop than (S2 - a GUS Train Platform): if the stop number of S1 is less than the stop number of S2: decide yes; otherwise: decide no. To decide whether (S1 - a GUS Train Platform) is a later stop than (S2 - a GUS Train Platform): if the stop number of S1 is greater than the stop number of S2: decide yes; otherwise: decide no. Section - Next Heading To decide which direction is the next heading of (C - a subway car): let L be a random subway line traveled by C; let P be the location of the stand-in of C; if the current heading of C is the route heading of L and the last stop of L is P: decide on the opposite of the route heading of L; otherwise if the current heading of C is the opposite of the route heading of L and the first stop of L is P: decide on the route heading of L; otherwise: decide on the current heading of C. Section - Subway Transit Procedures To connect (C - a subway car) to (S - a GUS Train Platform): let train side be the track side of S; let station side be the opposite of train side; change the train side exit of S to C; change the station side exit of C to S; change the outside exit of C to S. To disconnect (C - a subway car) from (S - a GUS Train Platform): let train side be the track side of S; let station side be the opposite of train side; change the train side exit of S to nothing; change the station side exit of C to nothing; change the outside exit of C to nothing. To effect the arrival of (C - a subway car) at (S - a GUS Train Platform): [ say "SUBWAY ALERT: [C] arriving at [the S]...[line break]";] now the stand-in of C is in S; now the relevant direction of the stand-in of C is the track side of S; connect C to S; announce the arrival of C at S. To announce the arrival of (C - a subway car) at (S - a GUS Train Platform): if the location is S: say "A train emerges from the [opposite of current heading of C]ern tunnel, and an automated voice announces: 'Train now arriving from [platform label of previous actual stop of C] station. Please stand clear.'[paragraph break]The train pulls to a screeching halt on the tracks to the [track side of S], and its doors open. Several people rush out, quickly exiting the station."; if the location is C: say "The train lurches to a stop, and the doors to the [opposite of relevant direction of stand-in of C] slide open. A voice from somewhere overhead says 'This is [platform label of location of stand-in of C] station[if the antechamber of the location of stand-in of C is multi-line], a transfer station[end if]. Please watch your step when exiting the train.'[paragraph break]There is a mad scramble as people rush through the open door." To set the new destination of (C - a subway car): [ say "SUBWAY ALERT: [C] was heading [current heading of C] to [current destination of C]...[line break]";] now the current heading of C is the next heading of C; now the current destination of C is the next actual stop of C; [ say "SUBWAY ALERT: [C] will head [current heading of C] to [current destination of C]...[line break]";] announce the unloading of C. To announce the unloading of (C - a subway car): if the stand-in of C is at hand: say "A few more people exit the train and hurry out of the station. An automated voice announces: 'The next stop will be [platform label of next actual stop of C] station. This [current heading of C]bound train will depart in one minute.'[paragraph break]You hear a voice from inside the train say, 'Doors will be closing. Please stand clear.'"; if the location is C: say "A voice overhead says 'The next stop for this [route color of C] line train is [platform label of next actual stop of C] station[if the antechamber of the next actual stop of C is multi-line], a transfer station[end if]. Doors will be closing. Please stand clear.'" To effect the departure of (C - a subway car): let S be the location of the stand-in of C; [ say "SUBWAY ALERT: [C] departing [the S]...[line break]";] remove the stand-in of C from play; disconnect C from S; announce the departure of C from S: To announce the departure of (C - a subway car) from (S - a GUS Train Platform): if the location is S: say "The train doors close, and the train rolls off to the [current heading of C]."; if the location is C: say "The train's door slides shut and it starts to move, quickly exiting the station heading [current heading of C]." To announce the background noise of (C - a subway car): if the location is C: if C is en route: say "The train rumbles as it moves."; otherwise: say "Passengers [one of]stream[or]dash[or]run[or]shuffle[or]bustle[or]bolt[or]pour[or]flow[in random order] in and out of the subway car. [run paragraph on]"; otherwise if the location is a GUS Train Platform and C is the servicing train of the location: if current destination of C is the location and the activity timer of C is at most 3 and C is passive: [don't do this for nearby inbound or imminently-arriving trains] say "You hear a [if the activity timer of C is one]rumbling noise[else if the activity timer of C is two]distant rumbling noise[else if the activity timer of C is at least three]very faint rumbling noise[end if] from the [opposite of current heading of C]."; otherwise if C is en route: if a random chance of 1 in 5 succeeds: announce the tunnel noise of C from the location. [Note that this never happens in SpirI7wrak when the train is inbound to the current location, but that's an artifact of the default subway car transit time set to 4. If set to longer, it should show up occasionally.] To announce the tunnel noise of (C - a subway car) from (S - a GUS Train Platform): if C does not stop at S: do nothing; otherwise: let D be the current destination of C; let L be a random subway line traveled by C; [should be only one] let echo-source be up; [force default to be nonsensical, to generate bug reports] if the current heading of C is the route heading of L: [train is going in initial direction] if D is a later stop than the location: now echo-source is the current heading of C; otherwise: now echo-source is the opposite of the current heading of C; otherwise: [train is going in return direction] if D is an earlier stop than the location: now echo-source is the current heading of C; otherwise: now echo-source is the opposite of the current heading of C; say "The ghostly echo of a distant train reaches your ears from the [echo-source]ern tunnel." Section - Subway Transit Rulebook Subway transit rules is a subway car based rulebook. Definition: A subway car is passive rather than active if its activity timer is greater than zero. Definition: A subway car is en route rather than stationary if the number of rooms adjacent to it is zero and the stand-in of it is off-stage. First subway transit rule for a passive subway car (called waiting car) (this is the advance subway car timers when passive rule): decrement the activity timer of the waiting car. The default subway car reroute time is a number that varies. The default subway car reroute time is 1. The default subway car platform wait time is a number that varies. The default subway car platform wait time is 1. The default subway car transit time is a number that varies. The default subway car transit time is 4. Subway transit rule for a subway car (called emitting car) (this is the train background noise rule): if the emitting car is noiseless: [suppress background noise when speeding up train arrival] do nothing; otherwise if the emitting car is active: [suppress background noise on turns when train is arriving/departing] do nothing; otherwise: announce the background noise of the emitting car. Last subway transit rule for an active subway car (called routing car) (this is the active subway cars choose next action rule): if the routing car is en route and the stand-in of routing car is not in the current destination of routing car: [wants to arrive but not there yet] effect the arrival of routing car at the current destination of routing car; now the activity timer of the routing car is the default subway car reroute time; otherwise if the routing car is stationary and the current destination of routing car is the location of the stand-in of routing car: [should be at platform] set the new destination of routing car; now the activity timer of the routing car is the default subway car platform wait time; otherwise if the routing car is stationary and the stand-in of the routing car is not in the current destination of the routing car: [should be departing] effect the departure of routing car; now the activity timer of the routing car is the default subway car transit time; otherwise: [ say "SUBWAY ALERT: [routing car] is stuck at [location of stand-in of routing car].";] do nothing. Every turn (this is the make the trains run on time rule): repeat with moving car running through subway cars: follow the subway transit rules for moving car. Chapter - Purple Line Section - GUS Purple Line There is a subway line called the GUS Purple Line. The hue of the GUS Purple Line is purple. The route heading of the the GUS Purple Line is south. The line route of the the GUS Purple Line is {Frostham Train Platform, Aragain Train Platform, Fublio Valley Train Platform}. Section - Purple Line Car (PURPLELINE_car) [Note that logic related to the thug blocking movement has been relocated to the thug in this implementation. In the original source code, it was structured as an I6 before() rule on the Go action attached to the PURPLELINE_car room.] There is a subway car called a purple line car. The purple line car travels the GUS Purple Line. After going to the purple line car (this is the bit of color for boarding purple line rule): say "You enter the train car. The doors slam shut behind you."; continue the action. Section - Passengers [These are not implemented in the original source code but are given their own existence here for consistency of the world model.] Some passengers are unimportant scenery people in the purple line car. Understand "people" or "riders" as the passengers. Every turn when the location is a subway car (this is the move passengers to subway cars rule): now the passengers are in the location. Section - Subway Seats (PURPLELINE_car_seats, ORANGELINE_car_seats, GREENLINE_car_seats) A subway seat is in every subway car. Section - Subway Doors A subway door is in every subway car. Section - Sinister-Looking Thug (thug) [Note that, in the original source code, this object made use of the I6 'general' flag to control a one-time description of the thug approaching the player character. This implementation uses the more descriptive term 'menacing.'] A man called a sinister-looking thug is in Purple Line Car. The sinister-looking thug can be menacing. The description of the sinister-looking thug is "A thug, clearly. Some scrapper with an attitude, and the desire to use it." Understand "hood" or "hoodlum" or "scrapper" or "rake" or "Davey" as the sinister-looking thug. Instead of going from a subway car when the thug is at hand and the thug is menacing (this is the thug won't let you leave rule): create an expectant pause with the sinister-looking thug asking the thug's challenge about departing; say "As you try to get off, the thug gets in your way. 'Going somewhere, Padre?'" The thug's challenge about departing is a binary reply. The positive rejoinder of the thug's challenge about departing is "'Not yet, you're not,' he says nastily." The negative rejoinder of the thug's challenge about departing is "The thug smiles to his friends. 'No, of course not! We[one of] were just getting started[or]'re having a good time[stopping] here.'" Instead of attacking the sinister-looking thug (this is the sorry you're not one of those kung fu kind of monks rule): say "As you move to show the rake a lesson, you notice several more thugs in the background, eyeing your every move. The thug smiles as you back off, cautiously." [The following "person" is not in the original, but is added because they are mentioned in the preceding response.] Some other thugs are unimportant scenery people in Purple Line Car. Understand "several" or "more" as the other thugs. This is the thug default life behavior rule: say "The thug is too busy being sinister." Instead of doing something when the current action is generic life behavior and the current action involves the sinister-looking thug (this is the sinister-looking thug generic life rule): abide by the thug default life behavior rule. Persuasion rule for asking the sinister-looking thug to try doing something (this is the reroute understood orders to thug to generic life response rule): consider the thug default life behavior rule; rule fails. After casting foblub at the sinister-looking thug (this is the sorry no it wasn't just the right lecture he was lacking rule): say "You give the thug a timely sermon on the folly of crime in a moral society. He seems momentarily fascinated. Too bad he wasn't actually sitting in anything." After casting espnis at the sinister-looking thug (this is the maybe his root issue is ADHD rule): now the sinister-looking thug is off-stage; now the other thugs are off-stage; say "You begin to extol the virtues of bedtime prayers, and the thug starts to yawn. Soon, his eyes blink slowly, and, before long, he nods off to sleep.[paragraph break]Two subway police officers, hiding until now, get up the nerve to capture the snoring thug, and drag him off, disappearing into the throng of people. At the sight of the police, the thug's companions melt away." Every turn when the sinister-looking thug can see the player and the sinister-looking thug is menacing and Expectant Pause is not happening (this is the menacing thug scene business rule): let i be a random number from 1 to 4; if i is: -- 1: say "The thug pokes you in the ribs."; -- 2: say "The thug snarls at you. 'Hey, I'm talking to you, preacher-man.'"; -- 3: say "The thug tries to act friendly, and fails."; -- 4: create an expectant pause with the sinister-looking thug asking the thug's challenge about reeducation; say "The thug scowls. 'You gonna tell me the error of my ways, Padre?'" The thug's challenge about reeducation is a binary reply. The positive rejoinder of the thug's challenge about reeducation is "The thug scoffs. 'Do your best, old man!'" The negative rejoinder of the thug's challenge about reeducation is "'I didn't think so,' jeers the thug." Every turn when the sinister-looking thug can see the player (this is the cue stereotype thug behavior rule): if the sinister-looking thug is not menacing: now the sinister-looking thug is menacing; say "The sinister-looking thug notices you from the back of the car and approaches. 'Well, well, well,' he says, 'What do we have here?'" Section - Newspaper A newspaper is in Purple Line Car. "There's a discarded newspaper in a seat nearby." It is papery. The description of the newspaper is "A copy of 'The Fublio Tribune', with news, sports and feature sections." The size of the newspaper is 15. Understand "paper" as the newspaper. After consulting the newspaper about "news/headline/headlines" (this is the read the newspaper news section rule): say "The news section has three major stories. The headliner is the continued failure to resolve peace in the Kobold war in southern Egreth. Recently, various troops have been cut-off from the main camps by clever kobold raiding groups. [paragraph break]A second story details the shocking death of a GUE Tech student found in the subway tunnels in Gurth City Station, the apparent victim of a GUS train. 'Don't know how he got in there,' a subway worker is quoted as saying.[paragraph break]Finally, a sad local news story about a nice couple in Fublio Valley who recently were victims of the kidnapping of their son. Investigators have no leads as of yet." After consulting the newspaper about "sports" (this is the read the newspaper sports section rule): say "Apparently, the golem brothers at Flathead Stadium have amassed an amazing 322-0 winning streak."; After consulting the newspaper about "feature/features" (this is the read the newspaper feature section rule): say "The paper points out that culture seekers should check out the newly discovered Leonardo Flathead painting on exhibit at the Royal Museum." After consulting the newspaper about "ads/ad/classifieds/classified" (this is the read the newspaper classified section rule): say "'FOR SALE: A new IF game -- [']SPIRITWRAK[']. Price: $0.00'". After consulting the newspaper about "comics/comic/funnies" (this is the sorry no comics section rule): say "The comics section is missing. Bummer." After consulting the newspaper about something (this is the no such topic in newspaper rule): if the number of words in the topic understood is greater than one: say "Try reading about 'news', 'sports' or 'features'."; otherwise: say "You can't find anything in the paper about that." Section - Purple Line Train There is a subway train proxy called a Purple Line train. The Purple Line train stands in for the purple line car. Chapter - Orange Line Section - GUS Orange Line The GUS Orange Line is a subway line. The hue of the GUS Orange Line is orange. The route heading of the GUS Orange Line is east. The line route of the GUS Orange Line is {Gurth City Train Platform Lower, Greater Anthar Train Platform, Aragain Train Platform Lower}. Section - Orange Line Car (ORANGELINE_car) There is a subway car called an orange line car. The orange line car travels the GUS Orange Line. After going to the orange line car (this is the bit of color for boarding orange line rule): say "You squeeze onto the train car. The doors close behind you."; continue the action. Section - Orange Line Train There is a subway train proxy called an Orange Line train. The orange line train stands in for the orange line car. Chapter - Green Line Section - GUS Green Line The GUS Green Line is a subway line. The hue of the GUS Green Line is green. The route heading of the GUS Green Line is south. The line route of the GUS Green Line is {New Borphee Train Platform, Gurth City Train Platform, Miznia Train Platform}. Section - Green Line Car (GREENLINE_car) There is a subway car called a green line car. The green line car travels the GUS Green Line. After going to the green line car (this is the bit of color for boarding green line rule): say "You shove your way onto train car. The doors close behind you."; continue the action. Section - Annoying Yupple (yupple) [Note that, in the original source code, this object made use of the I6 'general' flag to control a one-time description of the yupple approaching the player character. This implementation uses the more descriptive term 'talkative.' Also note the conversion of implicit underlining to bold type for consistency. Finally, note the addition of the equivalent of an I6 default 'life' behavior, which was missing in the original source code I received.] A man called an annoying yupple is in Green Line Car. The annoying yupple can be talkative. The description of the annoying yupple is "A young yupple, immaculately dressed in a pinstripe three-piece suit and tie." Understand "young" or "yuppie" as the annoying yupple. The annoying yupple wears an unimportant thing called a pinstripe three-piece suit. The annoying yupple wears an unimportant thing called a tie. Instead of attacking the annoying yupple (this is the really that's not the kind of outreach the Order envisions rule): say "Much as you'd like to, that's just something the Order would probably frown upon." Instead of going from the green line car to somewhere while the yupple is at hand (this is the careful he'll talk your ear off rule): say "As you try to get off, the yupple jumps up and gets in your way. 'Wait, wait, we have so much to talk about!'" [Note that the following message is not in the original source code since the yupple does not have a default response for its I6 'life()' routine. It is added for consistency, following the pattern of the thug.] This is the yupple default life behavior rule: say "The yupple is too intent on his blathering to notice." Instead of doing something when the current action is generic life behavior and the current action involves the annoying yupple (this is the annoying yupple generic life rule): abide by the yupple default life behavior rule. Persuasion rule for asking the annoying yupple to try doing something (this is the reroute understood orders to yupple to generic life response rule): consider the yupple default life behavior rule; rule fails. After casting espnis at the annoying yupple (this is the don't be bored just switch topics rule): say "You give a sermon on the dangers of improper bathtub caulking, but the yupple seems quite fascinated. 'That reminds me of...' You cringe." After casting foblub at the annoying yupple (this is the ditch the yupple rule): now the annoying yupple is off-stage; say "You draw a stunning parallel between corporate morality and monarchical rule. The yupple's jaw drops. 'I've got to tell my boss that,' he says. He tries to leave his seat, but finds himself stuck fast. Several passengers nearby take the opportunity to remove the yupple (seat included) to a different part of the train." Every turn when the annoying yupple can see the player and the annoying yupple is talkative and Expectant Pause is not happening (this is the talkative yupple scene business rule): let i be a random number from 1 to 4; if i is: -- 1: say "The yupple talks unceasingly about rainfall in some place called 'the Amazon basin'."; -- 2: say "The yupple smiles brightly. 'There's so much I have to talk about!'"; -- 3: say "The yupple drones on about the science behind large corporate takeovers."; -- 4: create an expectant pause with the annoying yupple asking the yupple's challenge about the joke; say "The yupple laughs -- a sound somewhat like a snoring bloodworm. 'So the guy says, [']I thought you meant my [bold type]wife[roman type].['] Get it? Wife?'" Every turn when the annoying yupple can see the player (this is the cue stereotype talker behavior rule): if the annoying yupple is not talkative: now the annoying yupple is talkative; say "The annoying-looking yupple notices you from the back of the car, and approaches. 'A priest!' he says, 'Just the kind of person I was looking for.' He squeezes into a seat near you." The yupple's challenge about the joke is a binary reply. The positive rejoinder of the yupple's challenge about the joke is "The yupple laughs. 'You have a good sense of humor for a member of the clergy,' he remarks." The negative rejoinder of the yupple's challenge about the joke is "The yupple launches into an intricate explanation of the joke, robbing it of any humor it might have had." Section - Green Line Train There is a subway train proxy called a Green Line train. The green line train stands in for the green line car. Section - Thin Slot [Note that, in the original source code, coin slots are a class, and there are individual instances for each gate. Since they are virtually all identical (except the broken one), this seemed inefficient, so this implementation uses a single slot object that is relocated as appropriate and acts differently when part of a broken GUS Gate. Also, note that some logic for the corresponding class in the original source code that is relevant to the I6 LetGo fake action is handled here with a rule for the taking action, due to the operation of the 6G60 Standard Rule "convert remove to take".] There is a scenery open opaque container called a thin slot. The description of the thin slot is "You see a rather small, thin slot that seems to be almost cut into one of the metal sides of the gate[if a damaged GUS Gate incorporates the thin slot]. It looks slightly dented[end if]." The size of the thin slot is 1. Understand "small" or "metal" or "coin slot" as the thin slot. To point out that the slot is too small to reach into: say "There's no way to get anything out of that tiny, thin slot." Instead of taking something when the thin slot is at hand and the noun is in the thin slot (this is the slot is too narrow to reach into rule): point out that the slot is too small to reach into; rule fails. Definition: a thing is slot-fitting if it is a coin or it is the thin wire. Definition: the thin slot is malfunctioning rather than functioning if it is incorporated by a damaged GUS Gate. Definition: the thin slot is obstructed rather than unobstructed if it is incorporated by a damaged GUS Gate and it contains a coin. After searching the thin slot (this is the thin slot can't be searched rule): say "The slot is too narrow and dark to see inside of it." After searching the malfunctioning thin slot (this is the can't see what's jamming slot rule): if the thin slot is obstructed: say "You can just catch a glimpse of something (the edge of a coin?) a few inches into the slot."; otherwise: say "You peer into the dented slot. You can't see anything but darkness." Carry out examining the obstructed thin slot (this is the suppress listing of contents when slot is obstructed rule): say the description of the slot with an extra line break; rule succeeds. Instead of attacking a GUS Gate when the thin slot is at hand (this is the redirect attacks on a gate to the slot when present rule): try attacking the thin slot instead. Instead of attacking the functioning thin slot (this is the saints aren't vandals rule): discourage violence against gates. Instead of attacking the malfunctioning thin slot (this is the saints can be tempted to be vandals though rule): if the thin slot is obstructed: say "[first time]If violence is ever the solution, you decide, it must be now. [only]You give the slot a sound thumping and even kick the gate for good measure. Though you can hear something rattling inside, nothing else happens."; otherwise: say "The temptation of violence is strong, but you can't see that it would do any good right now." Instead of inserting something that is not slot-fitting into the thin slot (this is the most things won't fit into the subway token slot rule): say "It doesn't look like that's going to fit into the slot." After inserting a coin (called the sunk cost) into the functioning thin slot (this is the coin accepted rule): now the sunk cost is part of a random GUS Gate incorporating the thin slot; say "The coin slides into the slot with a satisfying thunk." After inserting a coin (called the sunk cost) into the malfunctioning thin slot (this is the coin jammed rule): say "The coin slides into the slot, but instead of a thunk, you hear a rasping click[first time].[paragraph break]A subway nymph appears with a 'pop!'[paragraph break]She looks at the gate disapprovingly. 'Broken again? I thought they just fixed it! Well, fine.' She seems rather annoyed. 'We'll get someone to look at it, eventually.'[paragraph break]The nymph disappears in huff[only]." Instead of inserting the thin wire into the unobstructed thin slot (this is the poking around the slot normally does nothing rule): say "You poke the wire in the slot for a bit, but nothing happens." Instead of inserting the thin wire into the obstructed thin slot (this is the poking around the obstructed slot frees the jam rule): now every coin in the thin slot is part of a random GUS Gate incorporating the thin slot; accomplish contrarian-at-the-gates; say "You poke around in the slot, and manage to free something! There is a solid thunk-like noise." Every turn when the player can see a GUS Gate (called spotted gate) (this is the move slot where needed rule): if the location is the front side of the spotted gate: now the thin slot is part of the spotted gate; otherwise: remove the thin slot from play. Chapter - Frostham GUS Station (FROSTHAM_GUSStation) [Note that, in the original source code, this object made use of the I6 'general' flag to track state so that a different room description would be provided the first time the player entered the room. Since this is the first GUS station accessible within the game, the presumed intent is to give a "first impression" of GUS stations in general. The same functionality is covered here using an I7 [one of]/[stopping] construction in the room's description.] Frostham GUS Station is a GUS Station. The stop name of the Frostham GUS Station is "Frostham". Frostham GUS Station is down from Subway Entrance. The description of the Frostham GUS Station is "[one of]You are standing in a dimly-lit underground chamber. There seems to be a much larger room to the southeast, which is unfortunately almost completely blocked by a long metal barricade and gate. Stairs lead up to the outside.[or][default description][stopping]". An unimportant distant view called a GUS Stop platform is in Frostham GUS Station. Understand "train platform" as the GUS Stop platform. Frostham GUS Station is the exodus of Frostham Train Platform. Section - Metal Fence (metal_fence) A metal fence is a backdrop in Frostham GUS Station. The description of the metal fence is "It looks like a smooth metal fence." Understand "barricade" or "barrier" as the metal fence. [Note that the phrase used in these rules is defined in the section declaring the "GUS Gate" kind.] Instead of climbing or jumping over the metal fence (this is the sorry the invisible subway workers will stop you rule): discourage fare-jumping. Chapter - Frostham Train Platform (FROSTHAM_GUSPlatform) Frostham Train Platform is a GUS Train Platform. The track side of the Frostham Train platform is east. South from Frostham Train Platform is Frostham Train Platform. [Note the separate declaration following to override the assumption that it is also north of itself.] North from Frostham Train Platform is nowhere. Section - Frostham Station Gate (FG_Gate) A GUS Gate called a Frostham station gate is southeast of Frostham GUS Station and northwest of Frostham Train Platform. Chapter - Aragain GUS Station (ARAGAIN_GUSStation) Aragain GUS Station is a multi-line GUS Station. The stop name of the Aragain GUS Station is "Aragain". Aragain GUS Station is down from Aragain North. Aragain GUS Station is the exodus of Aragain Train Platform. Aragain GUS Station is the exodus of Aragain Train Platform Lower. Chapter - Aragain Train Platform (ARAGAIN_GUSPlatform) Aragain Train Platform is a GUS Train Platform. The track side of the Aragain Train Platform is east. North from Aragain Train Platform is Aragain Train Platform. [Note this automatically makes it south of itself as well.] Understand "upper" as Aragain Train Platform. Section - Aragain Station Gate (AG_Gate) A GUS Gate called an Aragain station gate is southeast of Aragain GUS Station and northwest of Aragain Train Platform. Chapter - Aragain Train Platform Lower (ARAGAIN_GUSPlatform2) A GUS Train Platform called Aragain Train Platform Lower is down from Aragain Train Platform. The track side of the Aragain Train Platform Lower is south. The printed name of Aragain Train Platform Lower is "Aragain Train Platform (lower)". West from Aragain Train Platform Lower is Aragain Train Platform Lower. [Note the separate declaration following to override the assumption that it is also east of itself.] East of Aragain Train Platform Lower is nowhere. Chapter - Fublio Valley GUS Station (FUBLIO_GUSStation) Fublio Valley GUS Station is a GUS Station. The stop name of the Fublio Valley GUS Station is "Southern Fublio Valley". Fublio Valley GUS Station is down from Southern Fublio Valley. Fublio Valley GUS Station is the exodus of Fublio Valley Train Platform. Chapter - Fublio Valley Train Platform (FUBLIO_GUSPlatform) Fublio Valley Train Platform is a GUS Train Platform. The track side of the Fublio Valley Train platform is east. North from Fublio Valley Train Platform is Fublio Valley Train Platform. [Note the separate declaration following to override the assumption that it is also south of itself.] South from Fublio Valley Train Platform is nowhere. Section - Fublio Station Gate (FublioG_Gate) A GUS Gate called a Fublio station gate is southeast of Fublio Valley GUS Station and northwest of Fublio Valley Train Platform. Chapter - Greater Anthar GUS Station (ANTHAR_GUSStation) Greater Anthar GUS Station is a GUS Station. The stop name of the Greater Anthar GUS Station is "Greater Anthar". The platform placement of the Greater Anthar GUS Station is south. Greater Anthar GUS Station is down from Entrance to Greater Anthar. Greater Anthar GUS Station is the exodus of Greater Anthar Train Platform. Chapter - Greater Anthar Train Platform (ANTHAR_GUSPlatform) Greater Anthar Train Platform is a GUS Train Platform. The track side of the Greater Anthar Train platform is south. West from Greater Anthar Train Platform is Greater Anthar Train Platform. [Note this automatically makes it east of itself as well.] Section - Greater Anthar Station Gate (AntharG_Gate) A GUS Gate called a Greater Anthar station gate is south of Greater Anthar GUS Station and north of Greater Anthar Train Platform. Chapter - Gurth City GUS Station (GURTH_GUSStation) Gurth City GUS Station is a multi-line GUS Station. The stop name of the Gurth City GUS Station is "Gurth City". The platform placement of Gurth City GUS Station is southwest. Gurth City GUS Station is down from Gurth City Streets. After going up from Gurth City GUS Station (this is the it's always raining in Gurth rule): say "You are greeted by a light rain as you leave the station."; continue the action. Gurth City GUS Station is the exodus of Gurth City Train Platform. Gurth City GUS Station is the exodus of Gurth City Train Platform Lower. Chapter - Gurth City Train Platform (GURTH_GUSPlatform) Gurth City Train Platform is a GUS Train Platform. The track side of the Gurth City Train Platform is west. North from Gurth City Train Platform is Gurth City Train Platform. [Note this automatically makes it south of itself as well.] Understand "upper" as Gurth City Train Platform. Chapter - Gurth City Train Platform Lower (GURTH_GUSPlatform2) A GUS Train Platform called Gurth City Train Platform Lower is down from Gurth City Train Platform. The track side of the Gurth City Train Platform Lower is south. The printed name of Gurth City Train Platform Lower is "Gurth City Train Platform (lower)". East from Gurth City Train Platform Lower is Gurth City Train Platform Lower. [Note the separate declaration following to override the assumption that it is also west of itself.] West from Gurth City Train Platform Lower is nowhere. Section - Gurth Station Gate (GurthG_Gate) [Note that logic associated with this object for the jammed gate puzzle has been moved to the thin slot. See section "Thin Slot".] A damaged GUS Gate called a Gurth station gate is southwest of Gurth City GUS Station and northeast of Gurth City Train Platform. Chapter - New Borphee GUS Station (BORPHEE_GUSStation) New Borphee GUS Station is a GUS Station. The stop name of the New Borphee GUS Station is "New Borphee". The platform placement of the New Borphee GUS Station is southwest. New Borphee GUS Station is down from Downtown New Borphee. New Borphee GUS Station is the exodus of New Borphee Train Platform. After going up from New Borphee GUS Station (this is the it's always crowded in New Borphee rule): say "You enter the city and are nearly flattened by crowds rushing past."; continue the action. Chapter - New Borphee Train Platform (BORPHEE_GUSPlatform) New Borphee Train Platform is a GUS Train Platform. The track side of the New Borphee Train Platform is west. South from New Borphee Train Platform is New Borphee Train Platform. [Note the separate declaration following to override the assumption that it is also north of itself.] North from New Borphee Train Platform is nowhere. Section - Borphee Station Gate (BorpheeG_Gate) A GUS Gate called a Borphee station gate is southwest of New Borphee GUS Station and northeast of New Borphee Train Platform. Chapter - Miznia GUS Station (MIZNIA_GUSStation) Miznia GUS Station is a GUS Station. The stop name of the Miznia GUS Station is "Miznia". The platform placement of Miznia GUS Station is southwest. Miznia GUS Station is down from Mizniaport. Miznia GUS Station is the exodus of Miznia Train Platform. Chapter - Miznia Train Platform (MIZNIA_GUSPlatform) Miznia Train Platform is a GUS Train Platform. The track side of the Miznia Train Platform is west. North from Miznia Train Platform is Miznia Train Platform. [Note the separate declaration following to override the assumption that it is also south of itself.] South from Miznia Train Platform is nowhere. Section - Miznia Station Gate (MizniaG_Gate) A GUS Gate called a Miznia station gate is southwest of Miznia GUS Station and northeast of Miznia Train Platform. Chapter - Subway Tunnel (Subway_Tunnel) [Note that, in the original source code, the definitions for this location and its objects appeared in the SPECIAL.INF source file, not SUBWAY.INF as with the other location in this Part. It has been moved here because it seems more naturally considered as within the subway system. Also note that this implementation makes many one-way connections to this room from GUS Train Platform rooms to help with dynamically describing train platforms. The player is not intended to be able to actually reach this room except via "descent" from the portal in room "Atrii Four" -- see the "can't walk along the tracks rule" under "New Kinds / GUS Train Platform." Finally, note the use of a printed name different from the internal name to prevent accidental confusion with the "small dark tunnel" found elsewhere.] There is a dark room called Subway Tunnel. "You're in a large, dark tunnel that seems to run north and south. To the south, you see light. There seem to be two metal tracks running along the ground." The printed name of Subway Tunnel is "Dark Tunnel". South from Subway Tunnel is Gurth City Train Platform. Instead of going nowhere from Subway Tunnel when the noun is north (this is the I guess there's a magical safety system of some sort rule): say "You walk north, and run into a invisible force." After going south from Subway Tunnel (this is the you've finally gotten into the tunnel rule): accomplish tunnel-trawler; say "You step out into an underground chamber. A burly, uniformed figure sees you exit the tunnel and yells, 'Hey, no playing in the tunnels, pal!'[line break]"; continue the action. Every turn while the location is Subway Tunnel (this is the tunnel activity rule): let i be a random number from 1 to 40; if i is between 17 and 18: say "Suddenly, without warning, a huge train car appears on the tracks, heading south! It plows straight into you."; end the game in death; otherwise if i is between 6 and 7: say "Suddenly, a huge train car appears on the tracks, heading north! You barely avoid getting pulverized! Strangely, as you watch the train continue north, it seems to disappear into blackness nearby. It's as though the train was simply removed from the tunnel somehow."; otherwise if i is between 36 and 40: say "You hear a rumbling noise echoed from somewhere, and the entire tunnel seems to shake. Then, all is quiet." Section - Tracks (ST_tracks) [Note that, in the original source code, this object had the name "tracks" applied twice in its parse list. It is presumed that at least one of them was intended to be "track", so that change is made here.] A scenery thing called some tracks are in Subway Tunnel. The description of the tracks is "Two long metal tracks, running north and south. There's something oddly familiar about them." Understand "track" or "metal" as the tracks. Section - Briefcase (briefcase) A closed openable container called a briefcase is in Subway Tunnel. The description of the briefcase is "A somewhat battered brown-leather briefcase." The carrying capacity of the briefcase is 5. The size of the briefcase is 15. Understand "case" or "battered" or "brown" or "leather" or "brown-leather" as the briefcase. Section - Red Scroll (red_scroll) A scroll called a red scroll is in the briefcase. The red scroll is inscribed with luncho. Part - Monastery and Environs [SPIRIT.INF] Section - Icy Surface [Note that this region is implemented to simplify duplication of behavior attached to locations Frozen_river and Frozen_river2 in the original version. I also took the liberty of modifying the behavior to prevent pointless insta-death.] Icy Surface is a region. To warn about ice's fragility: say "The ice cracks alarmingly. Maybe that's not such a good idea." After jumping in Icy Surface (this is the not exactly a risk-free pastime rule): warn about ice's fragility. After jumping in Icy Surface more than one time (this is the well you were warned rule): say "You bravely jump, but the ice cracks in many places. You plunge into the freezing river, becoming a human popsicle in a short amount of time."; end the game in death. Section - River Ice (river_ice) [Note that the original source code declares the river_ice object as a supporter, but the only reason seems to be to allow the command "put sand on ice", as river_ice was given an I6 before() routine for the Receive action to redirect attempt to put things on it into a Drop action. This implementation uses an I7 backdrop to simplify letting it appear in multiple locations. The locations for this backdrop are declared locally in the relevant room chapters.] There is a mass-nouned backdrop called some river ice. The river ice is in Icy Surface. The description of the river ice is "The ice is thick and quite smooth." Understand "frozen" as the river ice. Instead of putting something on the river ice (this is the redirect putting things on the river ice to dropping rule): try dropping the noun instead. After attacking the river ice (this is the please don't find another way to kill yourself rule): warn about ice's fragility. After attacking the river ice the second time (this is the oops there it is rule): say "With determined and repeated effort, you smash through the ice. You experience a moment of elation, which turns quickly to terror as the ice continues to crack around you, you fall into the river, and you drown."; end the game in death. Chapter - Monastery Chapel (MON_Chapel1, MON_Chapel2) [In the original source code, two separate rooms are created. The first version, used in the introductory sequence, is MON_Chapel1, while MON_Chapel2 is the version that the player will find while exploring the monastery. This implementation collapses the two rooms into one. There is no particular reason for this, but it seems safe to do and easy enough with I7's support for scenes. Note that some of the logic attached to the MON_Chapel1 object in the original source code has been relocated to a scene called "Introductory Sequence" -- see that section. Other I6 'before' logic, commented out in the version of the source code received, has been relocated to the Brother Joseph section.] Monastery Chapel is a room. "You are standing in a monastery chapel." [Note that the room description is revised by the Introductory Sequence scene.] Some wooden pews are unimportant scenery in Monastery Chapel. Understand "wood" as the wooden pews. Instead of going from Monastery Chapel to somewhere while Joseph is in a state of meditation (this is the don't let player leave until they've spoken with Joseph rule): say "[one of]As you turn to go, your eyes take in the scene around you in more detail. The walls, the stench, the singed altar... it is clear that what you experienced was no dream. You urgently want to [or]Not before you [stopping]speak with Brother Joseph, so he can help you make sense of the situation." Section - Altar (altar) [Note that this object makes use of the I6 'found_in' property in the original source code to let it appear in both MON_Chapel1 and MON_Chapel2. Since these two rooms have been collapsed in this implementation, the I7 equivalent of declaring it to be a backdrop is skipped. Also note that this object made use of the I6 'general' attribute to track whether the player had found the vial of holy water. The more descriptive property "ransacked" is used here.] A scenery supporter called an altar is in Monastery Chapel. The altar can be damaged. The altar can be ransacked. The description of the altar is "The altar is roughly the shape of a five foot white cube[if the altar is damaged]. The top edges appear to be singed black, and the altar is covered in cracks and chips[end if][if the altar is ransacked]. A ragged hole can be seen in one side[end if]." Understand "singed" or "cracks" or "chips" as the altar when the altar is damaged. Understand "ragged" or "hole" or "secret" or "compartment" as the altar when the altar is ransacked. After searching the altar when the altar is damaged and the altar is not ransacked (this is the how is a vial hidden in a cube rule): now the altar is ransacked; now the vial of holy water is on the altar; say "As your hands pass across the sides of the altar, part of it crumbles, revealing the remains of a small secret compartment. [run paragraph on]"; silently try taking the vial of holy water; if the player carries the vial of holy water: say "Within the compartment is a vial of holy water, which you take."; otherwise: say "A small glass vial is revealed." Section - Vial of Holy Water (holywater) There is a thing called a vial of holy water. The description of the vial of holy water is "A small glass vial of holy water." The size of the vial of holy water is 5. Understand "glass" as the vial of holy water. Instead of eating the vial of holy water (this is the let's insist on correct verbs in a matter of such import rule): say "The glass shards are unlikely to agree with you. You might want to try drinking it instead." Instead of drinking the vial of holy water (this is the holy water restores hit points rule): now the current hit points of the player is the maximum hit points of the player; remove the vial of holy water from play; say "You quaff the holy water with a simple ceremony. You feel physically and spiritually refreshed." Section - Brother Joseph (Joseph) [In the original source code, large portions of Brother Joseph's code were commented out, with a note for Mr. Yu that the small puzzle presented by the logic (requiring the player to break Joseph's concentration gently) was unpopular. I rather liked the "flavor" of the interaction that was provided by the original version, however, so this implementation restores some of those responses without reinstituting the puzzle part as a serious barrier to progress. Note that this object used the I6 'general' attribute, either to track whether Joseph was meditating or to record the first contact with the PC. The more descriptive property 'in a state of meditation' is used here for the first case, alternate logic taking advantage of I7's internal state tracking is used for the second. This object also used a property called 'weight' that was used in recording the method by which Joseph was disturbed from his meditation. A more natural approach for I7 (storing the actual action in a property called 'manner of rousing') is taken in this implementation. Although this object did not have the I6 'transparent' property set, he is given the "open-inventoried" attribute here so the PC can see the added Rod object he carries. Finally, note that, while the original source code's Joseph object had an I6 'Life()' routine with a section applicable to the I6 Answer and Order actions, this would only intervene in cases where the 'special_word' was 'hello', and the Life() routine would otherwise continue to its 'default' section. As a result, Joseph gets the typical pattern of "generic life behavior" rules in this implementation.] Brother Joseph is an open-inventoried man. Brother Joseph can be in a state of meditation or alert. Brother Joseph can be inclined to give advice. Brother Joseph has some text called current pose. The current pose of Brother Joseph is "At the front of the chapel, Brother Joseph stands in deep concentration, holding the Rod of the Ancients." Brother Joseph has a stored action called manner of rousing. The initial appearance of Brother Joseph is "[if Brother Joseph is in a state of meditation]Brother Joseph kneels in front of the remains of the altar, his eyes closed, deep in meditation.[else][current pose][end if]". The description of Brother Joseph is "Brother Joseph is a pale man, with gray eyes, a fine beard, and a finer disposition[if Brother Joseph is in a state of meditation]. At the moment, his eyes are closed, and his face is an unmoving mask of concentration[end if]." Understand "monk" or "Joe" as Brother Joseph. Some gray eyes are animal-like unimportant things part of Brother Joseph. A fine beard is an unimportant thing part of Brother Joseph. Brother Joseph carries a thing called the Rod of the Ancients. The description of the Rod of the Ancients is "It is captivating, as always." To activate berserk monk mode: now the resurrections remaining of the player is zero; say "His anger is plain. You abruptly recall that Brother Joseph is a renowned full-contact martial artist.[paragraph break]'Impudent wretch! I'll show you how we deal with non-believers here!'[paragraph break]His final lesson to you is short and to the point."; end the game in death. Instead of attacking Brother Joseph (this is the attacking Joseph is not smart rule): say "Your blow sends Brother Joseph staggering back.[paragraph break]Brother Joseph gets up and brushes himself off, glaring at you.[paragraph break]"; activate berserk monk mode. Instead of throwing something at Joseph (this is the don't throw things at the head monk rule): activate berserk monk mode. Instead of waking Brother Joseph when Brother Joseph is in a state of meditation (this is the meditation is different from sleep rule): say "Joseph isn't asleep, just meditating. You may need to do something subtle to rouse him." Instead of waking Brother Joseph while Brother Joseph is alert (this is the he's awake already rule): say "Joseph's eyes twinkle. 'I'm awake,' he says." Instead of manual manipulation when Brother Joseph is at hand and the noun is Brother Joseph and Brother Joseph is in a state of meditation (this is the can't wake Joseph by physically touching him rule): say "It seems rude, or disrespectful, or somehow just plain wrong to manhandle him when he's in this enlightened state[first time]. Perhaps you can find a way to gain his attention without touching him[only]." [The following message is modified slightly from the original to be consistent with the idea that reciting any substantial portion of a chant uses up the memory. Note that this is an instead rule, so no casting attempt will occur.] Instead of casting a spell at Brother Joseph while Brother Joseph is alert (this is the no spells for you rule): say "Brother Joseph cuts you short after the first few words. 'That won't be necessary.'" Instead of querying Brother Joseph about a rod (this is the treat querying Joseph about a rod as asking about the rods topic rule): try asking Brother Joseph about "rods" instead; rule succeeds. [force success of action] Instead of asking Brother Joseph about a topic listed in the Table of Joseph's Topic Responses while Brother Joseph is alert (this is the Joseph response to known topics rule): say "[response entry][paragraph break]"; rule succeeds. [force success of action] Understand "Palemon" or "Tuffberry" or "Toolbox" as "[other monk]". Understand "Brother [other monk]" or "[other monk]" as "[other monk entry]". [IMPDO - make custom topics for each?] [Note that, in the following table, the items in the "topic" column can take the form of either quoted text or a token created through various "understand" rules. This was done before creation of the querying it about action (see "Asking It About" in "Modified Standard Actions"), which is a big improvement over laboriously constructing dual-purpose tokens (i.e. for both understanding the name of the noun and for using as a conversation topic) as was done with the holy amulet. Also: See the section for "Holy Scriptures" to find definitions for the various "[X entry]" topics, and the section on "Holy Amulet" to find the definition of the "[amulet noun phrase]" token.] Table of Joseph's Topic Responses topic response "[rod entry]" "'We must recover the Rod before it is too late!'" "[demon entry]" "'Beware the demon! He is most cunning and dangerous.'" "[other monk entry]" "'I fear I know not where his feet now tread.'" [Note that the following rule must specify "when Brother Joseph is alert", or he will respond even when meditating.] Instead of asking Brother Joseph about something while Brother Joseph is alert (this is the default Joseph response to questions rule): say "'I don't know anything about that. Perhaps you should consult our library upstairs?'" To indicate hesitance about disturbing Joseph: say "It seems rude, or disrespectful, or somehow just plain wrong to speak with him when he's in this enlightened state[first time]. Perhaps you can find a way to gain his attention non-verbally[only]." Instead of asking Brother Joseph about something while Brother Joseph is in a state of meditation (this is the asking Joe questions while he's meditating won't rouse him rule): indicate hesitance about disturbing Joseph; rule fails. Instead of telling Brother Joseph about something while Brother Joseph is in a state of meditation (this is the telling Joe things while he's meditating won't rouse him rule): indicate hesitance about disturbing Joseph; rule fails. Instead of answering Brother Joseph that something while Brother Joseph is in a state of meditation (this is the answering things to Joe things while he's meditating won't rouse him rule): indicate hesitance about disturbing Joseph; rule fails. Instead of showing the prayer book to Brother Joseph (this is the treat showing prayer book to Joe as querying him about it rule): try querying Brother Joseph about the prayer book instead. Instead of yelling when Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the yelling to wake Joseph is definitely not allowed rule): say "There's no way you could bring yourself to do that. Not to the leader of the Order, and certainly not in the peace of the chapel[first time]. No, you want something a 'little more dignified,' as Brother Joseph is always reminding you[only]." Instead of praying while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the praying will wake Joseph but not activate leveling up rule): say "You kneel and begin a prayer to the Deities for relief from the worry that plagues you. Perhaps in answer, Joseph stirs. He helps you to your feet and begins to speak."; rouse Joseph. Instead of querying Joseph about an item listed in the Table of Joseph's Noun Responses while Brother Joseph is alert (this is the Joseph response to known nouns rule): say "[response entry][paragraph break]"; rule succeeds. [force success of action] Brother Joseph recognizes the holy amulet, the prayer book and the copy of the Holy Scriptures. Table of Joseph's Noun Responses item response Brother Joseph "Joseph smiles. 'I believe we've been introduced.'" holy amulet "[if Brother Joseph can see the amulet]'The amulet will be essential to your quest. Do not leave the Monastery without it[else]'Have you lost it? Without it you have no powers[end if].'" copy of the Holy Scriptures "'Study the holy scriptures, and you will be rewarded.'" prayer book "[if Joseph cannot see the prayer book]'Your prayer book is vital to your quest. You must preserve it[else if Brother Joseph can see the prayer book and the number of spells recorded by the prayer book is at least 15]Joseph smiles as he looks over the multitude of inscribed pages. 'Your mastery of the mystical arts is impressive[else if the number of spells recorded by the prayer book is at least 10]Joseph reviews your progress and is pleased. 'So much knowledge gathered in such a short time[else if the number of spells recorded by the prayer book is at least 5]Joseph quickly reviews your progress. 'I see you are learning new chants. Well done[else]Joseph thumbs through it briefly. 'It represents the beginning of your learning, not the end[end if]!'" Instead of telling Brother Joseph about something while Brother Joseph is alert (this is the Brother Joseph is a patient listener rule): say "'Do tell.'" Instead of showing a rod to Brother Joseph while Brother Joseph is alert (this is the Joseph is pretty blase about seeing these rule): say "'Have you succeeded in retrieving the Rod? If so, do what you feel is right.'"; rule succeeds. [force success of action] Instead of giving a fake rod (called offered relic) to Brother Joseph while Brother Joseph is alert (this is the Joseph collects fake rods rule): now Joseph carries the offered relic; say "Joseph takes the rod piece. 'Well done, brave Priest!' he says."; rule succeeds. [force success of action] Instead of giving a real rod (called offered relic) to Brother Joseph while Brother Joseph is alert (this is the Joseph is puzzled by real rods rule): say "Joseph looks at the rod piece and seems puzzled. 'This isn't any part of the Rod of the Ancients that I've ever seen. And yet, it seems similar.'[paragraph break]He hands it back to you. 'In this, my teachings can help you no further.'" Instead of giving something to Brother Joseph while Brother Joseph is alert (this is the Joseph needs not your silly item rule): say "Joseph waves away your offering. 'You may need that in your quest.'" This is the Joe default life behavior rule: if Brother Joseph is alert: say "At the moment, Joseph seems to be preoccupied with spiritual matters."; otherwise: say "Perhaps it's best not to bother him; he seems very deep in meditation." Instead of doing something when the current action is generic life behavior and the current action involves Brother Joseph (this is the Brother Joseph generic life rule): abide by the Joe default life behavior rule. Persuasion rule for asking Brother Joseph to try giving a fake rod to the player (this is the Joseph will reluctantly return fake rods rule): persuasion succeeds. Persuasion rule for asking Brother Joseph to try doing something (this is the reroute understood orders to Joseph to generic life response rule): consider the Joe default life behavior rule; rule fails. To rouse Joseph: now the manner of rousing of Brother Joseph is the current action; now Brother Joseph is alert; now Brother Joseph is inclined to give advice; now the player carries the holy amulet; [starts off-stage so it can't be seen Joe "carried" it] say "[line break]'I'm glad you found me. As you know, thanks to the old fool standing before you, the demon Anabais is loose upon the world once more. He has broken the Rod of the Ancients which was keeping our house and Order protected from outsiders. It is a sorry day for us all.'[paragraph break]Joseph pauses for a moment. 'You are our final hope in this time of chaos. Brothers Palemon, TuffBerry and Toolbox have left the Order, and only you remain. I must now ask you to once more serve the Order which you have so faithfully served in the past. Our continued existence depends on it.[paragraph break]You must go out into a world gone mad alone, retrieve the four broken pieces of the Rod of the Ancients, and return them here to me, so that we can rid the world of the evil we have loosed!'[paragraph break]Brother Joseph pauses and searches his robes. 'Here, you will need this,' he says, giving you an unusual amulet. 'Without this amulet, the Ancient Ones cannot give you the mystic aid that you will most certainly need. Keep it close at all times.'[paragraph break]Joseph grasps your shoulder briefly, his brow wrinkled as he looks into the distance behind you. 'Go now, and may the Gods smile upon us all.'" After sneezing or yawning while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the rouse Joseph with polite noise rule): say "You make a subtle noise. Slowly, Joseph opens his eyes and turns towards you, rising to his feet."; rouse Joseph. After laughing while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the rouse Joseph with impolite noise rule): say "Joseph's eyes open, and he rises to his feet, looking at you with arched eyebrows. 'I'm afraid this is a serious situation,' he states."; rouse Joseph. After singing while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the rouse Joseph with singing rule): say "Well, singing in the chapel doesn't seem [italic type]too[roman type] boisterous, so you try. After a few measures of your favorite hymn, Joseph's expression starts to change slightly... was that a wince?[paragraph break]A strained smile comes over his face as he quickly gets to his feet. You stop singing, and Joseph begins to speak."; rouse Joseph. After jumping while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the rouse Joseph with jumping rule): say "Is... is that allowed in here? Doubtful about the propriety of this action, the best you can manage is a small, nervous hop.[paragraph break]Joseph's brow wrinkles slightly at the sound. After what seems like a very long time, his eyes open and he rises to greet you."; rouse Joseph. After meditating while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the fight fire with fire to wake Joseph rule): follow the default report meditating rule; say "[line break]Joseph is standing nearby, regarding you with amusement. After giving you a moment to return to full awareness, he speaks."; rouse Joseph. After waiting while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the just wait Joseph's meditation out rule): say "You wait patiently for Joseph to finish[one of][or]. He shows no awareness of your presence[or], wondering if this is one of his marathon meditation stints[or], the very icon of endurance under trying conditions[stopping]."; After waiting while Brother Joseph is at hand and Brother Joseph is in a state of meditation for the fifth time (this is the Joseph eventually wakes rule): say "Joseph stirs, blinks, and turns his face towards you. He rises to his feet, brushing dust from his robe."; rouse Joseph. After putting the prayer book on the altar while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the prayer book abuse is the first tester's favorite way to wake Joseph rule): say "Using perhaps a bit less care than usual, you let your prayer book fall heavily onto [the altar]. Glancing at Joseph, you think see an eyelid twitch. After a few long moments, he opens his eyes and focuses on you. He is already speaking as he rises to meet you."; rouse Joseph. After dropping something (called noisemaker) while Brother Joseph is at hand and Brother Joseph is in a state of meditation (this is the rouse Joseph by dropping stuff rule): say "Joseph's eyes snap open as [the noisemaker] lands on the floor. He glances at [object pronoun of noisemaker], then at you, rising to his feet."; rouse Joseph. [Note that I wanted to do the following in the format of a switch statement, but I couldn't get it to work in 6G60 -- first attempt trying to compare action names was breaking the compiler, second attempt trying to convert the action name to text and compare that compiled but did not function. The implemented version forces both the "rousing method" column and the "rousing action stub" to be indexed text, which seemed to be necessary in 6G60 since a) listing things such as sneezing, yawning, etc. in the rousing method column of the Table of Parting Advice seemed to automatically default the type to stored action, b) setting "action name stub" to an action name resulted in compiler failure since the "listed in" construction disallowed equating an action name to a stored action, and c) attempting to set the "rousing method" column to an action name resulted in compiler failure because terms like sneezing, yawning, etc. were not considered action names.] Before going somewhere when Brother Joseph is at hand and Brother Joseph is alert and Brother Joseph is inclined to give advice (this is the Joseph's parting words of advice rule): say "As you leave, Brother Joseph calls out: [run paragraph on]"; let rousing action stub be indexed text; let rousing action stub be "[action name part of the manner of rousing of Brother Joseph]"; [ say "(manner of rousing = [manner of rousing of Brother Joseph], name = [rousing action stub])";] if the rousing action stub is a rousing method listed in the Table of Parting Advice: say "[advice entry][paragraph break]"; otherwise: say "'May the gods favor you in your quest, Brother!'"; now Brother Joseph is not inclined to give advice. Table of Parting Advice rousing method (indexed text) advice "sneezing" "'Oh, and take something for that cold!'" "yawning" "'Oh, and remember -- reading the scriptures is one sure way of maintaining an active mind!'" "laughing" "'One last thing, Brother. Mirth is wonderful for the soul... in moderation, of course.'" "dropping" "[if the noun part of the manner of rousing of Brother Joseph is in Monastery Chapel]'Don't you want [the noun part of the manner of rousing of Brother Joseph]?[else]'Oh, and you might want to take better care of [the noun part of the manner of rousing of Brother Joseph]. It could aid you in your quest![end if]'" "waiting" "'Patience is a virtue, Brother, but now is the time for action!'" "jumping" "'The world can be dangerous, Brother. Always look [bold type]before[roman type] you leap!'" "meditating" "'You will do well to continue to pause for reflection when you face obstacles, Brother. May it help you to see clearly!'" "praying" "'It is true that we rely on divine guidance, Brother, and the Deities do help the pious. But remember: The gods help most those who help themselves!'" "putting it on" "[if the noun part of the manner of rousing of Brother Joseph is on the altar]'Brother! You've left [a noun part of the manner of rousing of Brother Joseph] behind![else]'Fare thee well, Brother. Take anything you like from the monastery, if you think it will be of aid![end if]'" After greeting Brother Joseph when Brother Joseph is alert (this is the he's a pleasant head monk rule): say "Joseph smiles. 'Hello.'" [Note the following is needed to keep the PC from wrecking the game if they do as they're "supposed" to and hand over one or more fake rods. It would have been preferable to let the actual action take place, but getting around the "block giving" rule would mean a lot of work not easily justified at this point. This is one of those types of instances where the loss of procedural rules will hurt, as it would be readily handled with: A procedural rule for Brother Joseph giving a fake rod to the player: ignore the block giving rule. ... plus the addition of the desired report rule, while still respecting the rest of the action-processing machinery if other rules needed to participate. It would hurt a lot less if there was some way to halt processing of the check rulebook *without* halting action-processing as a whole. Perhaps allowing ending the check rulebook with a success to do so would serve the purpose without too much in the way of modification needed? Authors could still use "rule fails" to halt action processing when desired, or "continue the action"/"make no decision" to end the rule without ending the rulebook processing. Although this would put some burden on the author of the "succeeding" check rule to make sure more general check rules are abided by, at least there would not be the need to handle things normally covered by carry out, report, and after rules, as there is when forced to create a special-purpose instead rule.] Instead of Brother Joseph giving a fake rod (called reclaimed rod) to the player (this is the Joseph hands over a rod rule): now the player carries the reclaimed rod; say "[one of]Brother Joseph's eyebrows raise. 'You want it back?' he asks. 'Well, I trust you know what you are doing.'[paragraph break]He [or]Nodding, Brother Joseph [stopping]gives you [the reclaimed rod]."; rule succeeds. [force success of action] Every turn when Brother Joseph is at hand and Brother Joseph carries every fake rod (this is the oops you were doing it wrong rule): say "'The Order will remember your acts of bravery forever,' Joseph intones, as he brings out all four rod pieces and sets about joining them together. A sudden burst of light blinds you![paragraph break]When you can see again, a large black sphere of malevolent energy floats nearby. Joseph, either dead or stunned, lies in one corner of the room. The four rod pieces are floating above the sphere.[paragraph break]'Foolish little priest,' a evil voice says in you mind. 'You have only brought upon yourself your own undoing. With my rod returned by an innocent, the pact is complete. Come forth, my brothers, for our time of power is at hand!'[paragraph break]The last thing you hear is mocking laughter, before the world as you know it comes to a close."; now the resurrections remaining of the player is zero; end the game in death. Section - Holy Amulet (amulet) There is a scored wearable thing called a holy amulet. The description of the holy amulet is "This amulet and chain are imbued with with a strange, mystical saffron energy. The pendant portion of the amulet is in the shape of a small, golden cube." The size of the holy amulet is 7. Understand "[amulet noun phrase]" as the holy amulet. [Note the somewhat more complex "understand" rules used for this object, as we want some logic in Brother Joseph to be able to understand the same reference.] Understand "holy" or "golden" or "saffron" as "[amulet-adjective]". Understand "amulet" or "chain"or "pendant" or "cube" or "energy" as "[amulet-noun]". Understand "[amulet-adjective] [amulet-noun]" or "[amulet-noun]" as "[amulet noun phrase]". [The following routine is used in the logic for a number of rooms, to signal PC proximity to one of the false rod pieces. Wording is changed slightly from the original source code, for variety. Also, in this implementation, the order of messages is independent of the triggering locations. Note that, since the original source code checked for the I6 'worn' attribute of the amulet to be set, this logic preserves the apparently-intended meaning, though technically the amulet being worn by a third party (an unexpected state) would suffice in the original. The visibility check is for the sake of safety.] To signal proximity to an unholy artifact guarded by (sentinel - a spirit): if the player wears the holy amulet and the player can see the holy amulet: now the sentinel is scried; say "[one of]Your amulet suddenly gives off a bright purple flash[or]Your amulet emits a bright purple flash, then returns to normal[or]Your amulet pulses with a bright, purple light, which quickly fades[or]Your amulet briefly brightens into a purple incandescence, which rapidly subsides[at random][one of]![or].[stopping]"; otherwise: do nothing. After wearing the holy amulet (this is the amulet invests spellcasting power rule): say "As you place the amulet around your neck, a sense of mystical power wells up within you." [Note that the following message is included in the original source code and seems to serve the specific intent of overriding default behavior for I5.5, so it is included here.] Instead of wearing the holy amulet when the holy amulet is worn (this is the that's an exclamation too far rule): say "You're already wearing that." Chapter - Your Quarters (MON_your_quarters) Your Quarters is a room. "You are in your room in the Monastery. It is sparsely furnished, but it certainly feels like home. The exit is north." Section - Ascetic Furnishings Some ascetic furnishings are a backdrop in Your Quarters. The description of the ascetic furnishings is "By long tradition, the desk and chair here are designed to have the smallest (and least comfortable) existence required to support their function[first time]. You don't think of them often and see little reason to start doing so now[only]." Understand "desk" or "chair" or "furniture" or "minimal" or "minimum" or "bare" or "sparse" as the ascetic furnishings. Instead of taking the ascetic furnishings (this is the echoes of the past rule): say "The desk and chair belong here." Instead of pushing or pulling the ascetic furnishings (this is the leave the scenery alone rule): say "Rearranging furniture was never your favorite hobby, and right now you have better things to be doing." Instead of entering the ascetic furnishings (this is the no time for sitting I'm questing rule): say "[if we have not examined the ascetic furnishings]They're extremely uncomfortable. [end if]Thankfully, you've no task that would require sitting on them right now." Section - Note (note) A handwritten note is in Your Quarters. "Lying atop your desk is a handwritten note." It is papery. The description of the handwritten note is "The note, in a hastily written scrawl, reads:[paragraph break]'Please stop by the chapel as soon as you can.'[line break][35 spaces]-- Joseph'". The size of the handwritten note is 5. Section - Staff (staff) [IMPDO - extra hassle since people are almost certain to think of this as a weapon; make it break comically on first use? find a puzzle for it? !Object staff "staff" MON_your_quarters ! with name "staff" "walking" "trusty" "stick", ! initial "Your trusty walking staff is right where you left it.", ! description "A stout piece of pine you found while on a nature \ ! walk, this staff has served you well on many journeys.", !weight 20, ! size 20, !; ] Section - Sleeping Pallet (sleeppallet) [Note that the description in the original source code indicates this object is portable, so it is explicitly declared so here to override I7's default assumption that supporters are fixed in place. Also note that the original object had an I6 before() routine to interrupt the I6 Go action in cases where the player was "in" the sleeping pallet, but an automatic exit attempt is provided by I7 in this case, so there seems to be no good reason to override this player nicety. Also note that I've taken the liberty of monkeying with this object to make it more interesting.] A portable enterable supporter called a sleeping pallet is in Your Quarters. The sleeping pallet can be furled or unfurled. The description of the sleeping pallet is "This is your sleeping pallet, a short, portable sleeping roll made of homespun filled with straw. It's softer than it looks." The size of the sleeping pallet is 25. Understand "homespun" or "straw" or "bedroll" or "bed roll" or "roll" as the sleeping pallet. Understand "rolled" or "rolled up" or "rolled-up" as the sleeping pallet when the sleeping pallet is furled. Before printing the name of the furled sleeping pallet (this is the indicate when pallet is rolled up rule): say "rolled-up ". Instead of taking the unfurled sleeping pallet when the player is not enclosed by the sleeping pallet (this is the unrolled pallets are unwieldy rule): say "With a heave, you pull the pallet off the ground, but it's too big and unwieldy to carry around in this state, so you put it back down." After taking the furled pallet (this is the furled pallets are portable rule): say "You heft the rolled-up pallet and tuck it firmly under one arm[first time]. Hopefully, you won't have to carry it around for too long[only]." Check rolling up the furled sleeping pallet (this is the can only roll pallet so tightly rule): say "You can't roll it any tighter than it is."; rule fails. Check rolling up the sleeping pallet when the sleeping pallet is laden (this is the can't roll things up in the pallet rule): say "You can't roll it up while [the list of things on the sleeping pallet] [if the number of things on the sleeping pallet is at least 2]are[otherwise]is[end if] on it."; rule fails. Carry out rolling up the unfurled sleeping pallet (this is the rolling the pallet furls it rule): now the sleeping pallet is furled. After rolling up the sleeping pallet (this is the describe rolling up the pallet rule): say "In just a few moments, you roll the pallet into a much more compact configuration." Check unrolling the unfurled sleeping pallet (this is the can't unroll non-rolled pallet rule): say "It's already unrolled."; rule fails. Check unrolling the sleeping pallet when the sleeping pallet is born by the player (this is the can't unroll pallet while carrying it rule): say "It's too big to carry around unrolled. You need to put it down first."; rule fails. Carry out unrolling the furled sleeping pallet (this is the unrolling the pallet unfurls it rule): now the sleeping pallet is unfurled. After unrolling the sleeping pallet (this is the describe unrolling the pallet rule): say "With a few deft moves, you unroll the pallet." Instead of entering the pallet (this is the no time for sleeping in this game rule): if the player has not enclosed the holy amulet: say "Your anxiety about the situation has you too high-strung for further rest. You feel that you must see Brother Joseph to better understand your... memory? dream? vision?"; otherwise: say "Mindful of the urgency of your quest, you are compelled to disregard whatever weariness you feel." Chapter - Hallway One (MON_f1hall1) A room called Hallway One is north from Your Quarters. "You are in a hallway running west and east. The vaulted ceilings are a nice touch. Your quarters are to the south." The printed name of Hallway One is "Hallway (near your quarters)". A vaulted ceiling is unimportant scenery in Hallway One. Understand "ceilings" as the vaulted ceiling. Chapter - Hallway Three (MON_f1hall3) A room called Hallway Three is east from Hallway One. "You are in a hallway running west and east. Brother TuffBerry's quarters lie to the south. Brother Palemon's quarters are to the north." The printed name of Hallway Three is "Hallway (near quarters of Palemon and TuffBerry)". Chapter - Hallway Four (MON_f1hall4) [Note that the original source code for this room specifies an n_to string value to tell player's that Joseph is not in. This version moves that logic to a rule associated with the re-included location for Joseph's quarters (see next chapter).] A room called Hallway Four is east from Hallway Three. "You are at the east end of an east-west hallway. Brother Joseph's quarters lie to the north, and Brother Toolbox's quarters lie to the south." The printed name of Hallway Four is "Hallway (east end)". Chapter - Brother Joseph's Quarters (MON_Joseph_quarters) [Note that this room was commented out in the version of the source code received, perhaps because it is never meant to be entered by the player, and perhaps due to space crunch. This implementation restores it as preparation for potential future modifications.] A room called Brother Joseph's Quarters is north of Hallway Four. "You are in Brother Joseph's quarters. The hallway lies to the south." The ascetic furnishings are in Brother Joseph's Quarters. [See "Your Quarters" for declaration of this backdrop.] Instead of going from Hallway Four to Brother Joseph's Quarters when Brother Joseph is not in Brother Joseph's Quarters (this is the can't visit Joseph's quarters when he's not in them rule): say "It doesn't look like Joseph is in. Perhaps you can find him elsewhere." Chapter - Acolyte Chambers (MON_acolyte_chambers) [IMPDO - add this room? find a sidekick here? ! The acolyte chambers lie to the east.", [from east end] ! Object MON_acolyte_chambers "Acolyte Chambers" ! with description "You are in a long chamber that serves as the home \ ! for the many devoted acolytes of the Order. The room is currently \ ! empty.", ! w_to MON_f1hall4, ! has light; ] Chapter - Hallway Two (MON_f1hall2) A room called Hallway Two is west from Hallway One. "You are at the west end of an east-west hallway. There are stairs up and down here, and an exit to the west." The printed name of Hallway Two is "Hallway (west end)". The stairs are in Hallway Two. [See "Basement" for declaration of this backdrop.] Chapter - Monastery Gardens (MON_garden) A room called Monastery Gardens is west of Hallway Two. "You are in the Monastery gardens, where various shrubs and conifers are covered in a light blanket of snow. An open cloister lies to the west, while a doorway heads east." The snow is in Monastery Gardens. [See "Snow" for declaration of this backdrop.] Section - Open Cloister A proxy entrance called an open cloister is in Monastery Gardens. The relevant direction of the open cloister is west. Section - Open Doorway A proxy entrance called an open doorway is in Monastery Gardens. The relevant direction of the open doorway is east. Section - Snow-Covered Shrubs (shrubs) [Note that this object was commented out in the original source code, most likely due to space considerations. This implementation takes the liberty of restoring it.] Some snow-covered shrubs are vegetable-like scenery in Monastery Gardens. The description of the snow-covered shrubs is "Good thing they're evergreen." Understand "shrub" or "conifers" or "conifer" or "plants" as the snow-covered shrubs. Section - Sand (sand) [Note that this object included an I6 'article' property in the original source code, but this is unnecessary in I7.] A mass-nouned thing called some sand is in Monastery Gardens. "A small area in the snow has been cleared for late winter planting, and some sand has been sprinkled here and there." The description of the sand is "A handful of sand, nothing more, nothing less." The size of the sand is 5. Chapter - Cloister Walkway (MON_cloister) A room called Cloister Walkway is west of Monastery Gardens. "You are in an open cloister, that runs along the Monastery gardens to the east. To the north is the main wing of the Monastery. To the south is the entrance hall." An unimportant scenery thing called a cloister's interior is in Cloister Walkway. Understand "open" as the cloister's interior. Chapter - Entrance Hall (MON_Entrance_hall) A room called Entrance Hall is south of Cloister Walkway. "This is the large entrance hall to the Monastery. Many a devoted visitor has passed through this place. There is an exit to the outside world to the south, and the rest of the Monastery lies to the north." After going south from Entrance Hall (this is the add color to exiting the Monastery rule): say "You are surprised by a cold blast of wind as you leave the Monastery."; continue the action. After going north to Entrance Hall (this is the add color to entering the Monastery rule): say "You are greeted by relatively warm and cozy air."; continue the action. Chapter - Main Hall (MON_Main_hall) A room called Main Hall is north of Cloister Walkway and south of Monastery Chapel. "This is the main hall of worship in the Monastery. A large domed ceiling hides some sort of lighting that create a warm yet serene atmosphere. A covered walk to the rest of the Monastery lies to the south. To the north is the Monastery chapel. A brazier sits in the center of the room." A large domed ceiling is unimportant scenery in Main Hall. Understand "dome" as the large domed ceiling. The lighting is in Main Hall. [See "Royal Museum" for declaration of this backdrop.] A serene atmosphere is unimportant scenery in Main Hall. Section - Brazier (brazier) [Note that this object is given the I6 'open' attribute in the original source code, but this is assumed in I7.] A scenery container called a brazier is in Main Hall. The description of the brazier is "This is a silver incense brazier, somewhat similar to an ornamental bowl on a tripod. Brother Palemon supposedly found it on one of his many journeys." The size of the brazier is 9. Understand "silver" or "incense" or "ornamental" or "bowl" or "tripod" as the brazier. Instead of taking the brazier (this is the brazier has sentimental value rule): say "That's been in the Monastery for years. People would be upset if you took it." Instead of inserting something that is not a sphere into the brazier (this is the only spheres go in braziers rule): say "That doesn't seem quite appropriate." After inserting a sphere into the brazier (this is the who will ever see these messages rule): say "As you place the sphere in the brazier, you feel a strange sensation. Suddenly, the brazier is filled with "; if the noun is: -- brown sphere: say "earthworms. "; -- green sphere: say "seawater. "; -- red sphere: say "burning embers. "; -- silver sphere: say "white vapors. "; say "No, wait, it's as it was before[run paragraph on]"; silently try taking the noun; if the player carries the noun: say ". You hastily withdraw the sphere, and try to clear your mind"; say "." Chapter - Brother Palemon's Quarters (MON_Palemon_quarters) [This room contained one of the less intuitive puzzles in the original -- players were expected to "push west wall" to reveal a secret door, presumably by divining the secret rooms presence through a combination of understanding the layout of the Monastery (not guaranteed, given the irregular layout) and the hint provided by the "torn page" object (the presence of which is not well explained, even though the reason for it is clear). Compounding the situation is that the I6 default world model included various wall-type objects for each direction (e.g. "north wall", "southwest wall", "floor"), which could be found in every location. However, these are absent in I7 (at least in 6G60), which, while an improvement, complicates porting this puzzle. The approach taken here is to use a bit of artistic license to redefine the puzzle structure in a way that doesn't depend on emulating I6's "walls everywhere" approach, avoids unnecessarily complicating the world model by creating a kind of indoor room that includes appropriate "wall" backdrops (which was considered), and offers what is hoped is a more intuitive solution for most players to this extraneous puzzle. Note that this object made use of the I6 'general' attribute to track whether the secret door had been revealed. This implementation chooses to use an actual door object (see following section) for the sake of consistency of the world model, so the door's state is tested directly in equivalent logic.] A room called Brother Palemon's Quarters is north of Hallway Three. "You are in Brother Palemon's quarters, which have been left unattended ever since Brother Palemon's unexplained disappearance many years ago. It's hard to tell how much of the dirt and dust in here has accumulated since then[first time], and how much was there when he vanished; Palemon was not known for his superior hygiene[only][if the secret door is open].[paragraph break]To the west, a small secret door in the wall leads into darkness[end if]. The exit is south." The ascetic furnishings are in Brother Palemon's Quarters. [See "Your Quarters" for declaration of this backdrop.] Instead of going west from Brother Palemon's Quarters when the secret door is closed (this is the pretend the secret door isn't there when it is undiscovered rule): abide by the fake can't go that way rule. Section - Evidence of Poor Hygiene Some evidence of poor hygiene is scenery in Brother Palemon's Quarters. The description of the evidence of poor hygiene is "Palemon was always a little sloppy, and the state of his quarters reflects that[if the smudges are at hand]. In addition to the coating of dust on every flat surface, there are smudges on the things he touched with his frequently unwashed and greasy hands. The marks can be seen on the chair, the desk, and -- oddly -- the west wall[end if]." Understand "dirt" or "dust" as the evidence of poor hygiene. Section - Smudges [The "ambiguously plural" property is defined in Emily Short's "Plurality" extension. It lets a thing standing in for two distinct labels, e.g. "smudges" (plural) and "wall" (singular), be assigned to both the "it" and "them" pronouns used by the parser when the player interacts with it.] Some smudges are scenery in Brother Palemon's Quarters. The smudges are ambiguously plural. The description of the smudges is "[if we have examined the torn page and we have not examined the evidence of poor hygiene]Remarkably, it seems that nobody has cleaned the wall since Tuffberry's report from years ago. [end if]The smudges are concentrated [if we have not examined the evidence of poor hygiene]on the west wall, [end if]in an area not much larger than your open hand." Understand "smudges" or "smudge" or "marks" or "mark" or "smudge marks" or "wall" or "walls" or "west wall" as the smudges. After touching or searching the smudges (this is the tactile investigation of smudges rule): say "Your fingers trace lightly over the marks. Fortunately, they're old enough that the grease has dried[first time]. You wonder idly how they got there[only]." Instead of opening the smudges (this is the can't open smudges rule): say "It's not really clear how to do that." Instead of pushing the smudges (this is the awww why did he get the room with the secret door rule): now the secret door is open; remove the smudges from play; say "Pushing the west wall reveals a hidden secret door! You've been in these quarters before, but certainly never noticed anything like this."; rule succeeds. Section - Secret Door A closed locked undescribed privately-named door called a secret door is west of Brother Palemon's Quarters. Section - Thin Journal (journal) A thin journal is in Brother Palemon's Quarters. The description of the thin journal is "This journal is very strange indeed. Brother Palemon seems to have been very preoccupied up to the point of his disappearance with strange accursed places that he believed are located all over Quendor. He also makes several references to evil [']spirits['] found in these places. You notice that several pages of parchment near the back of the journal have been torn out." The size of the thin journal is 15. Chapter - Hidden Sanctum (MON_Hidden_sanctum) A dark room called Hidden Sanctum is west of the secret door. "This small chamber obviously hasn't been used in quite some time -- the cobwebs and dust are several layers thick. There is a short crawl east." The dust is in Hidden Sanctum. [See "Ancient Tunnel" for definition of this backdrop.] The cobwebs are in Hidden Sanctum. [See "Bottom of Lighthouse" for declaration of this backdrop.] Section - Dusty Scroll (dusty_scroll) A scroll called a dusty scroll is in Hidden Sanctum. The dusty scroll is inscribed with foblub. Section - Faded Parchment (p2) A parchment called a faded parchment is in Hidden Sanctum. The description of the faded parchment is "'...are real! I have seen much evidence in the jungles of Miznia, marshes of Fublio Valley, the ruins of old Egreth and in Aragain itself.[paragraph break]I believe that they are associated with certain basic elements in the surrounding area. But they dare not show themselves now, not while magic is strong. Woe unto us, should the powers of magic cease, as there would be nothing to stop their terror...'". [IMPDO - new section = Old Egreth?] Chapter - Brother Tuffberry's Quarters (MON_Tuffberry_quarters) A room called Brother Tuffberry's Quarters is south of Hallway Three. "These are Brother TuffBerry's quarters, vacant since he undertook his quest for Joseph not long ago. The exit is north." The ascetic furnishings are in Brother Tuffberry's Quarters. [See "Your Quarters" for declaration of this backdrop.] Section - Torn Page (page) [Note that this item is modified from the original due to a change in the small puzzle it was intended to provide a hint about. See notes in the section for "Brother Palemon's Quarters" for details.] A torn page is in Brother Tuffberry's Quarters. It is papery. The description of the torn page is "This page was apparently torn from a larger document of some sort, perhaps one of Tuffberry's infamous cleanliness inspections. All that is left now reads:[paragraph break]'...not met the Order's standards for hygiene.[paragraph break]Once again, Brother Palemon is the worst offender among us -- even the walls of his quarters are besmirched by his food-stained hands! We must all assist him in realizing the benefits that accompany a proper respect for hygiene, such as...'". The size of the torn page is 5. Chapter - Brother Toolbox's Quarters (MON_Toolbox_quarters) A room called Brother Toolbox's Quarters is south of Hallway Four. "You are in Brother Toolbox's quarters, vacant ever since he left the order due to differences many years ago. The exit is north." The ascetic furnishings are in Brother Toolbox's Quarters. [See "Your Quarters" for declaration of this backdrop.] Section - Diary (tb_diary) A diary is in Brother Toolbox's Quarters. The description of the diary is "'-- <944 GUE> Today Brother Joseph tried to explain the essence of how we channel magic energy through our amulets. To me, this pales in comparison with the seemingly innate abilities of those who call themselves Enchanters. Joseph did show me a nice trick, however. He brought the Rod of the Ancients near my amulet, and the amulet gave off a flash of purple light! I'll have to try that one on the Acolytes tomorrow.'[paragraph break](there isn't much else of interest until the very last entry, which is not dated)[paragraph break]'-- So long diary. I'm now off to seek greater spiritual guidance in Thriff. I hear the summers there are very nice, too.'" The size of the diary is 12. Understand "toolbox's" as the diary. Section - Folded Scroll (folded_scroll) A scroll called a folded scroll is in Brother Toolbox's Quarters. The folded scroll is inscribed with espnis. Chapter - Hallway Two West (MON_f2hall1) A room called Hallway Two West is up from Hallway Two. "You are in a hallway on the second floor of the Monastery. The hallway continues east, while stairs lead downwards." The printed name of Hallway Two West is "Hallway (second floor, west)". The stairs are in Hallway Two West. [See "Basement" for declaration of this backdrop.] Chapter - Hallway Two East (MON_f2hall2) A room called Hallway Two East is east of Hallway Two West. "You are in a hallway on the second floor of the Monastery that runs east-to-west. To the north is the private meditation room. To the east is the Monastery library. To the northeast is an entrance to the steeple room." The printed name of Hallway Two East is "Hallway (second floor, east)". Chapter - Private Meditation Room (MON_priv_med_room) A room called Private Meditation Room is north of Hallway Two East. "You are in a small bare chamber that is used for private meditation and worship. The only exit lies to the south." Chapter - Monastery Library (MON_Library) A room called Monastery Library is east of Hallway Two East. "You are in the Monastery library, a cozy, almost cramped room with shelves of various books. The exit is to the west." Section - Bookshelves (lib_shelves) Some bookshelves are a scenery supporter in Monastery Library. Understand "library" or "monastery library" or "shelves" or "book shelves" or "shelf" or "bookshelf" or "book shelf" as the bookshelves. Section - Copy of the Holy Scriptures (HolyScriptures1) [Note that the original source code's logic for this book restricted players to looking up single-word entries. Since multi-word entries are much easier to handle in I7, the restriction is removed here, and several new matching phrases for topics are added to take advantage of this. Also note that the logic for this book is taken from Example 94 in WWI. Thank you to the author. In addition, note that the original source code gives this object the I6 'proper' attribute, which is equivalent to "proper-named" in I7. However, the printed name of the original object ("a copy of the Holy Scriptures") is in a form that it is not always desirable to treat as a proper name. It seems as though the primary intent of the combination is to make sure it is always referred to as "a copy of the Holy Scriptures" instead of "the copy of the Holy Scriptures" when taking inventory, even though it is proper-named. Here the decision is to just let it be singular-named, which seems appropriate when referring to the copy as apparently intended to be the usual case. Finally, note that this thing is given the "forged" attribute per its treatment in the original with respect to the "ledak" chant.] A forged thing called a copy of the Holy Scriptures are on the bookshelves. The description of the copy of the Holy Scriptures is "This sacred tome details the teachings and beliefs of the Order, of which it's certainly always good practice to re-familiarize yourself with. The scriptures are divided into several sections. Sections that can be consulted in greater detail include:[paragraph break][10 spaces]'Doctrines'[line break][10 spaces]'Demons'[line break][10 spaces]'Spirits'[line break][10 spaces]'(Book of the) Mystical'[line break][10 spaces]'(Book of the) Planes'[line break][10 spaces]'(Book of the) Ancients'[line break][10 spaces]'Legend of the Rod'". The size of the copy of the Holy Scriptures is 15. Understand "books" as the plural of the copy of the Holy Scriptures. The copy of the Holy Scriptures has some text called ledak-interaction event. The ledak-interaction event of the copy of the Holy Scriptures is "The Holy Scriptures are surrounded by a yellow glow. To your horror, the tome evaporates into nothing!" [Note that comments after entries are copied from comments in the original source code, reproduced as a guide to interpreting the plot.] Understand "sacred doctrines" or "doctrines" or "doctrine" or "canon" or "balance" or "harmony" as "[doctrines entry]". Understand "demons" or "demon" or "anabais" as "[demon entry]". Understand "evil" or "fire" or "water" or "earth" or "air" as "[spirits-adjective]". Understand "spirit" or "spirits" or "elemental" or "elementals" as "[spirits-noun]". Understand "[spirits-adjective] [spirits-noun]" as "[spirits entry]". Understand "mystic" or "mystical" or "magic" or "magical" as "[chants-adjective]". Understand "power" or "powers" or "spell" or "spells" or "chant" or "chants" as "[chants-noun]". Understand "[chants-adjective] [chants-noun]" or "[chants-noun]" as "[chants entry]". Understand "plane" or "planes" or "atrii" or "hades" or "heaven" or "hell" as "[planes entry]". Understand "rod" or "rods" or "rod of the ancients" or "legend" or "battle" as "[rod entry]". Table of Scriptures [Per Mr. Yu's comments: "Of course, this is a ruse created from the deviations of Anabais. Grounded in some fact though. Each section has a lie, which may not initially be obvious. Truthful sections are scattered over Quendor.'] topic script "[doctrines entry]" "'THE SACRED DOCTRINES OF THE ORDER OF BALANCE:[paragraph break]Thou shalt strive to achieve balance in a world filled with unbalance.[line break]Thou shalt pray to the Deities in moments of inner reflection.[line break]Thou shalt not harm innocents nor aid them -- this is the way of balance.'" "[demon entry]" "'Fear not, mortal men[line break]though your world be filled with demons[line break]and the wicked.[paragraph break]Thou alone can prevail[line break]as The Ancient Ones[line break]against Anabais, the trickster[line break]were victorious.'" [A lie: The Ancient Ones lost to Anabais and the other demons.] "[spirits entry]" "'Before the dawn of time, know that our world was filled with evil spirits of the elements, until mankind came upon the land and vanquished them forever.'" [A lie: Spirits still exist.] "[chants entry]" "'If one is true of doubts, then a believer in the great Harmony can draw upon the powers of the Ancients and perform feats of mystic power anywhere. Remember that in so doing, thou must act only as the channel of mystical power for the Ancient Ones.'" [A lie: Powers don't work everywhere, and not always.] "[planes entry]" "'Let not the ways of the mortal life dissuade the knowledge of higher and lower planes of existence.[paragraph break]For, beyond mortal reach, are places where those who have truly served the Order and those who have truly forsaken the Harmony of Balance will find themselves in death. These are the Ethereal Plane of Atrii and the plane of the damned -- Hades.'" [A lie: Don't have to die to reach Atrii.] "ancients" or "ancient ones" or "three" "'Trust in The Ancient Ones, those Three who showed mankind the way of Balance and Harmony.'" [A lie: Four Ancient Ones existed.] "[rod entry]" "'Anabais foresaw his own demise when he dared to challenge the Ancient Ones. From powers of light and darkness, the Ancient Ones constructed that holy Rod that we know only as the Rod of the Ancients, and did smite the demon Anabais so grievously, that they did imprison him in that very Rod, where he could do no harm. The Rod was wrought from pieces of ancient elemental energy, once separated. Only the powers of the Ancients could bring them together.'" [A lie: Anabais never imprisoned, etc.] After consulting the Holy Scriptures about a topic listed in the Table of Scriptures (this is the found matching scripture rule): say "[script entry][paragraph break]"; stop the action. After consulting the Holy Scriptures about (this is the default consulting Holy Scriptures response rule): say "There doesn't seem to be a section about that." After casting ledak at the Holy Scriptures (this is the hey remember that religion we dedicated our lives to turns out it was a fake rule): seek and destroy the Holy Scriptures. Section - A Brief History of Truth and Lies [Note that no equivalent to this thing can be found in the original source code provided by Mr. Yu. It is added to include the new clues crafted to ensure that the right "correct" answer can be deduced for the secret trophy room puzzle. See the section "Note on Overall Puzzle Logic" in chapter "Logic for Secret Trophy Room Puzzle" for details. This thing was give the "privately-named" property primarily to prevent the compiler from assuming that "and" by itself should refer to the book, an issue which popped up in playtesting.] A proper-named privately-named book called a brief history of truth and lies is on the bookshelves. The printed name of it is "[italic type]A Brief History of Truth and Lies[roman type]". Understand "book" or "history" or "brief" or "truth" or "of truth" or "lies" or "truth and lies" or "of truth and lies" or "a brief history" as the brief history of truth and lies. The description of it is "'Few remember the influence of the Prevaricon and the Veritassi on the Duncanthraxian court, nor the extent to which members of the two fabled cultures were integrated into daily life prior to 683 GUE.[paragraph break]It was in this year that Lord Duncanthrax, while providing a tour of his secret trophy room to a neighboring rival, was informed that there was insufficient information in its famous riddles to definitively establish the correct [']combination.['] Enraged, Duncanthrax immediately called for the two workers charged with crafting the riddles, a Prevaricon and a Veritassi, to be put on trial for treason.[paragraph break]The transcript of the trial has been studied exhaustively by both legal theorists and logicians. The two workers, on pain of death, were commanded to produce an additional clue that would allow the correct answer to always be found. Unfortunately, as might have been expected, the two workers could not agree on a single clue and each submitted their own. The Veritassi stated:[paragraph break][fixed letter spacing][5 spaces][']Neither did the same worker write both the northern and eastern clues nor did different workers respectively write the northern and southern clues.['][variable letter spacing][paragraph break]while the Prevaricon claimed:[paragraph break][fixed letter spacing][5 spaces][']Exclusively either the worker that wrote the western wall was a Prevaricon or both the Prevaricon and the Veritassi each wrote the same number of clues.['][variable letter spacing][paragraph break]Records of the trial recount that a deadly silence fell over the assemblage as Duncanthrax looked questioningly at his rival, who merely shook his head and said that too much depended on which worker wrote more clues. At the limits of his notoriously short patience, Duncanthrax then demanded which worker had done so, but each member of the pair repeatedly insisted that it had been the other.[paragraph break]The two defendants were immediately executed, and the subsequent exile of all Prevaricons and Veritassi from the kingdom drove them to the margins of society, where they maintain a precarious existence to this day.'" Chapter - Steeple Room (MON_Steeple_room) [Note that two room synonyms specified in the original source code ('latch' and 'handle') are now associated with the steeple window (see next section). Also note that the original source code specified an I6 'before' routine which included logic for the Go action that would often kill the player if they tried to climb out the window. There doesn't appear to be any good motivation for this, and, indeed, it is possible that a player running into this would accidentally learn that there is nothing of interest out the window. As a result, no equivalent logic is included in this implementation. However, this seems to reduce the sense of danger when exploring Steeple Roof. To compensate, some "slip timer" logic is installed in that location which does not appear in the original.] A room called Steeple Room is northeast of Hallway Two East. "You are in a round room with colored-glass windows. Wooden beams line the walls and rise to form a short point in the peaked ceiling above. A small walkway returns to the southwest. A long, wooden table sits in the center of the room." Some wooden beams and a walkway are unimportant scenery in Steeple Room. Understand "wood" as the wooden beams. Some colored-glass windows are unimportant scenery in Steeple Room. Understand "glass" as the colored-glass windows. An unimportant backdrop called a sill is in Steeple Room. After going outside from Steeple Room (this is the describe care when exiting window rule): say "[one of]Being careful as you step gingerly on the icy sill, y[or]Y[stopping]ou climb out the open window and somehow manage not to fall."; continue the action. Section - Long Table (steeple_table) [Note that the original source code specifies the word 'steeple' a part of the name property for the object. However, since this conflicts with the steeple window's name and the word is not used in the object's name or description, this has been omitted to avoid unnecessary disambiguation requests.] A scenery supporter called a long table is in Steeple Room. The description of the long table is "This long wooden table has been used for various private meetings and impromptu get-togethers between members of the Order in the past." Section - Steeple Window (steeple_window) [This window is rendered as a door, following the original design. Parameters not necessary (i.e. the I6 'found_in', 'door_dir', and 'door_to' properties, the I6 'door' attribute) or assumed within I7 are omitted. Also, the appropriate logic for handling attempts to enter the window is now handled automatically by I7, so it is not replicated here.] A door called a steeple window is outside from Steeple Room. The initial appearance of the steeple window is "[location-specific description for steeple window] ". The description of the steeple window is "A large rose-colored glass window[if the location is Steeple Room], with a handle and latch[end if]." Understand "rose-colored" or "rose" as the steeple window. Understand "latch" or "handle" as the steeple window when the location is Steeple Room. To say location-specific description for steeple window: if the location is the Steeple Room: if the steeple window is open: say "Someone has left a rose-colored window open, and some snow drifts in. "; [extra space at end prevents unnecessary line break] otherwise: say "A large rose-colored window lets some light in. "; [extra space at end prevents unnecessary line break] otherwise: if the steeple window is open: say "A window opens into the steeple proper. "; [extra space at end prevents unnecessary line break] otherwise: say "A large rose-colored window is partially covered with snow here. " [extra space at end prevents unnecessary line break] Instead of opening the closed steeple window when the location is Steeple Roof (this is the can't work steeple window from outside rule): say "Unfortunately, the window opens inward, and the latch and handle are on the inside." [Note the need to specify that the window "was" closed because the successful action changes it to open!] After opening the steeple window when the steeple window was closed and the location is Steeple Room (this is the baby it's cold outside rule): say "You turn the latch and yank the window's handle. A rush of wind and snow greets you as the window opens inward." Instead of closing the open steeple window when the location is Steeple Roof (this is the can't keep window closed from outside rule): say "It doesn't seem to want to stay shut. You can't quite reach the window latch from out here." Instead of attacking the steeple window (this is the it's made of player-proof glass rule): say "The window glass remains unmarred. It's probably made of that especially thick lead-glass that the Monastery got because Brother Toolbox kept complaining about drafts." Instead of pushing the closed steeple window (this is the pushing the window has two reasons to fail rule): say "It doesn't budge." [These next four rules added for consistency of push/pull behavior.] Instead of pushing the open steeple window when the location is Steeple Room (this is the treat pushing the windows as closing them when inside rule): try closing the steeple window instead. Instead of pulling the steeple window when the location is Steeple Room (this is the treat pulling the windows as opening them when inside rule): try opening the steeple window instead. Instead of pulling the steeple window when the location is Steeple Roof (this is the treat pulling the windows as closing them when outside rule): try closing the steeple window instead. Instead of pushing the steeple window when the location is Steeple Roof (this is the treat pushing the windows as opening them when outside rule): try opening the steeple window instead. Instead of searching the steeple window (this is the interpret searching the window as looking through rule): if the location is Steeple Room: say "The window looks out over a [if the steeple window is closed]rose-hued [end if]winter wonderland."; otherwise: say "[if the steeple window is open]The relative warmth of the steeple's interior beckons you[else]The situation looks much rosier in there than out here[end if]." Chapter - Steeple Roof (MON_Steeple_roof) A room called Steeple Roof is outside from the steeple window. "[if Snowy Outcropping is not relocated]You are on a very narrow ledge outside the Monastery steeple. [end if]The snow and wind [if Snowy Outcropping is not relocated]are doing their best to send you to a ungracious death below[else]fly furiously through the air above a massive snowdrift that is piled high against the side of the building, reaching nearly to the ledge outside the steeple's lucarne[end if]. The roof is quite sharply slanted." A very narrow ledge and some buffeting wind are unimportant scenery in Steeple Roof. The buffeting wind is mass-nouned. The snow is in Steeple Roof. [See "Snow" for declaration of this backdrop.] An unimportant scenery thing called a roof is in Steeple Roof. Understand "tiles" as the roof. An unimportant scenery thing called a windowframe is in Steeple Roof. Understand "frame" or "dormer" or "lucarne" as the windowframe. The sill is in Steeple Roof. [See "Steeple Room" for declaration of this backdrop.] Instead of going nowhere from Steeple Roof (this is the this is no place for exploring rule): if Snowy Outcropping is not relocated: say "It's hard enough staying on the ledge."; otherwise: say "Best not. Winter dire wolves have been known to prowl about out here." To send the player off the ledge: say "[line break]"; if Snowy Outcropping is relocated: say "Fortunately, the snow is now piled so high that it is a drop of only inches."; otherwise if the player is gravity-resistant: say "You float downwards gracefully, into the waiting jaws of a winter dire wolf that happens by in a [one of]terribly unlikely coincidence[or]coincidence so unlikely that it can only be explained by a whim of capricious cruelty from the gods above[stopping]."; end the game in death; otherwise: say "The ground breaks most of the bones in your body, including the important ones."; end the game in death. After jumping in Steeple Roof (this is the jumping from the steeple is allowed suicide rule): say "Well, if you insist."; send the player off the ledge. [Note that the following rule, which encourages players to minimize the amount of unnecessary time spent here, does not reflect logic in the original but is designed to compensate for some other changes made. See previous chapter.] Every turn when the player is in Steeple Roof and Snowy Outcropping is not relocated (this is the roof can be dangerous rule): if the player has been in Steeple Roof for exactly three turns: say "A [one of]particularly [or][at random][one of]strong [or]heavy [or]forceful [at random][one of]gust [or]blast [or]burst [at random]of wind [one of]sends your fingers scrambling for purchase on the windowframe[or]almost makes you lose your balance[or]threatens to send you skating off the ice-coated ledge[at random]."; if the player has been in Steeple Roof for seven turns: if a random chance of 1 in 2 succeeds: say "The wind seems to howl with rage as it reaches a new peak of intensity, and you are blown clear of the ledge."; send the player off the ledge. Chapter - Hallway Basement (MON_f0hall1) A room called Hallway Basement is down from Hallway Two. "You are in a hallway in the Monastery basement. The hallway continues to the east, and stairs lead upwards." The printed name of Hallway Basement is "Hallway (basement)". The stairs are in Hallway Basement. [See "Basement" (in the house with the oven) for declaration of this backdrop.] Chapter - Refectory (MON_Refectory) A room called Refectory is east of Hallway Basement. "You are in the Refectory, the general dining area for members of the Order. You grimace at the lingering scent of Brother Pufpistery's favorite dish -- Borphbelly stew.[paragraph break]Several large oak tables and benches adorn this otherwise bare room. An exit lies to the west, the kitchen is to the north, and another exit lies to the east." Some oak tables and some oak benches are unimportant scenery in Refectory. Understand "table" as the oak tables. Understand "bench" as the oak benches. To say barfbelly pun: say "[one of]'barf belly'[or]Borphbelly[stopping]". After smelling in the Refectory (this is the not a fan of Monkish cuisine rule): say "Even the faintest lingering scent of [barfbelly pun] stew is enough to make you feel like fasting." Chapter - Monastery Kitchen (MON_Kitchen) A room called Monastery Kitchen is north of Refectory. "You are in Brother Pufpistery's domain -- the dreaded acolyte kitchen. A huge soup cauldron sits unused nearby. The refectory is south." After smelling in the Monastery Kitchen (this is the smells fresh from the source rule): say "The smell of [barfbelly pun] stew is stronger here, unfortunately." Section - Cauldron (cauldrons) [This thing is given a property "rust-spotted" in this implementation to show a slight world-state change in response to the bekdab-oriented message seen in the original source code.] A scenery container called a cauldron is in Monastery Kitchen. The cauldron can be rust-spotted. The description of the cauldron is "This large [if rust-spotted]and somewhat rusty [end if]iron soup cauldron has the unmistakable odor of [barfbelly pun] stew[first time]. Ugg[only]." The size of the cauldron is 25. The carrying capacity of the cauldron is 10. Understand "large" or "iron" or "soup" or "vat" as the cauldron. After casting bekdab at the cauldron (this is the that's one way to get more iron in the monks' diet rule): now the cauldron is rust-spotted; say "The soup cauldron rusts a bit[if the cauldron was rust-spotted] more[end if]." Section - Preparing Table (preparing_table) A supporter called a preparing table is in Monastery Kitchen. The description of the preparing table is "A heavy wooden table with a well-used look." Understand "heavy" or "well-used" as the preparing table. After casting egdelp at the preparing table (this is the gotta try it on everything now rule): say "The table is now covered in a waxy film. All things considered, it actually looks cleaner now." Section - Scrap of Paper (recipe_paper) [Note that it appears in I7 6G60 that use of bold/italic automatically reverts to variable letter spacing, though this is implied not to be the case in WWI 5.9. The overridden fixed/variable spacing directives are left in place in case the behavior changes in the future.] A scrap of paper is on the preparing table. It is papery. The description of the scrap of paper is "It's a recipe torn from an issue of 'Better Homes and Caverns':[paragraph break][fixed letter spacing][bold type]GUILDMASTER SNEFFLE[']S PRIZE WINNING BIRTHDAY CAKE[roman type][paragraph break]Ingredients:[paragraph break][italic type][3 spaces]-- 1 small sack of flour[line break][3 spaces]-- 1 large sugar cube[line break][3 spaces]-- 1 packet of baking powder[line break][3 spaces]-- 1 stick butter[line break][3 spaces]-- 1 large corbie egg[line break][3 spaces]-- Dornberries, to taste[roman type][paragraph break]Mix the ingredients together. Fold the resulting mixture the correct number of times (a single gloth spell should do the trick). Bake in a GUE Automatic oven on the 'cake' setting.[paragraph break]Guildmaster Sneffle claims that 'the dornberries are the secret to making a cake even the King would be impressed with.' He also notes that 'improper folding of the dough will produce very poor results.'[variable letter spacing]". The size of the scrap of paper is 5. Understand "recipe" as the scrap of paper. After examining the scrap of paper (this is the reading the recipe makes the gloth spell known rule): now gloth is known. Chapter - Storeroom (MON_Storeroom) A room called Storeroom is east of Refectory. "You are in a small cramped storeroom, stocked with various crates and barrels of foodstuffs. The refectory is west." Some foodstuffs are unimportant scenery in Storeroom. Understand "crates" or "crate" or "barrels" as the foodstuffs. Every turn when the trapdoor is not discovered and the location is Storeroom (this is the mouse hint rule): if a random chance of 1 in 20 succeeds: now the fleeting impression of the mouse is in Storeroom; say "A tiny mouse scurries into view, then disappears under a barrel." Instead of going down from Storeroom when the trapdoor is not discovered (this is the prevent use of trapdoor when not discovered rule): abide by the fake can't go that way rule. Section - Fleeting Impression of the Mouse There is a scenery thing called a fleeting impression of the mouse. Instead of doing something with the fleeting impression of the mouse (this is the can't interact with mouse rule): say "The mouse seems to have disappeared[if the trapdoor is not discovered] under the barrel[end if]." Section - Large Barrel (crate1) [Note that the original source code applies the same logic in its I6 Before() rules to the Take and Remove actions. Including the I6 Remove action may have been a minor error on Mr. Yu's part, since it does not seem like it could ever be triggered short of somehow forcing the barrel to execute a remove action (i.e. have the barrel remove something from something else). No corresponding logic is included here.] A large barrel is a portable supporter in Storeroom. The description of the large barrel is "A large wooden barrel labeled 'DRIED PRUNES'." Instead of taking the large barrel (this is the barrel can't be taken rule): say "You can get your arms around it, but the barrel is far too bulky to carry around." After pushing or pulling or turning the large barrel when the trapdoor is not discovered (this is the barrel can be moved rule): now the trapdoor is discovered; now the trapdoor is described; say "Well whaddya know, a trapdoor..." Instead of opening the large barrel (this is the barrel shouldn't be opened rule): say "You'd probably need a hacksaw to do that. Besides, look what it says it contains." After casting egdelp at the large barrel (this is the these low-tech settings sure have lots of wooden items rule): say "The barrel is covered with a light, waxy film." Section - Sack of Flour (flour) [Note that the logic of the baking-related after rule here is part of the Baking_Pan object in the original source code. Also note the use of private-naming to allow conditional application of names.] An edible thing called a sack of flour is on the large barrel. It is privately-named. The description of the sack of flour is "A small sack of flour, all-purpose." The size of the sack of flour is 14. Understand "flour" as the sack of flour. Understand "sack" or "sack of" as the sack of flour when the sack of flour is not enpanned. Understand "heap" or "heap of" or "pile" or "pile of" as the sack of flour when the sack of flour is enpanned. After inserting the sack of flour into the baking pan (this is the convert flour to mess rule): now the printed name of the sack of flour is "pile of flour"; now the description of the sack of flour is "A heap of white flour."; say "You break open the bag and add the flour to the pan." Section - Trap Door (secret_trapdoor, secret_trapdoor2) [In the source code received from Mr. Yu, comments indicate that he would have liked to implement the trap door as a single object but couldn't figure out how to do so. Presumably this object was created before he came across the I6 'found_in' property, as a similar design problem is successfully solved in his implementation of the steeple_window object. This implementation uses a single door to honor Mr. Yu's original intent (and, more practically, because door connections are fixed in I7 6G60). Unnecessary or default parameters for I7 doors are not replicated. Also note that the secret_trapdoor object made use of the I6 'general' attribute to track whether it had been discovered by the player. The more descriptive property "discovered" is used here.] A closed undescribed privately-named door called a trapdoor is down from Storeroom. The initial appearance of the trapdoor is "[location-specific appearance for trapdoor]." The trapdoor can be discovered. The description of the trapdoor is "A wooden trapdoor in the [if the location is Storeroom]floor[else]ceiling[end if]." Understand "trap" or "door" or "trapdoor" as the trapdoor when the trapdoor is discovered. To say location-specific appearance for trapdoor: if the trapdoor is open: if the location is Storeroom: say "A trapdoor opens into darkness below"; otherwise: say "Light gleams in from an open trapdoor above"; otherwise: if the location is the Storeroom: say "There is a closed trapdoor in the floor here"; otherwise: say "You notice a closed trapdoor in the ceiling". After opening the trapdoor (this is the opening the trapdoor lets light into Caverns rule): now Caverns is lighted; continue the action. After closing the trapdoor (this is the closing the trapdoor plunges Caverns back into darkness rule): now Caverns is dark; continue the action. Chapter - Caverns (MON_Caverns) A dark room called Caverns is down from the trapdoor. "You are in an low underground cavern, made of roughly-worked stone. An even lower tunnel travels east." Some roughly-worked stone is an unimportant mass-nouned scenery thing in Caverns. Understand "rough" or "roughly" or "worked" as the roughly-worked stone. A low tunnel is an unimportant backdrop in Caverns. Understand "lower" as the low tunnel. Chapter - Cave Intersection (cave_intersection) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether the route to Mystical Cave was passable (i.e. the steel wall had been removed and the cave-in had not yet occurred). INCORRECT --> As the steel_wall has been implemented as a door, it is not removed but instead opened. However, to handle the post-cave-in situation, a new property is given to Mystical Cave (see that chapter).] A dark room called Cave Intersection is east of Caverns. "You are in a large open cavern. The rough limestone here was probably eroded by underground springs to form the somewhat circular chamber you now stand in. Oddly, there seems to have been a recent cave-in, as piles of rubble line the walls. A tunnel snakes off to the west[if the steel wall is off-stage and the mysterious passage is not sealed by cave-in]. To the southeast, there is a wide square hole -- the entrance to a mysterious passage[else if the steel wall is off-stage and the mysterious passage is sealed by cave-in]. A rubble-choked passage to the southeast is evidence of a recent cave-in[else][end if]." An unimportant scenery mass-nouned thing called some rough limestone is in Cave Intersection. The low tunnel is in Cave Intersection. [See "Caverns" for declaration of this backdrop.] Section - Piles of Rubble [Note, this is an overkill treatment of what is simply a room synonym in the original source code, especially since it shouldn't even be possible to return to the Mystical Cave after the cave-in normal play, but I'm experimenting after getting a run-time error trying to move the piles of rubble backdrop to a location and discovering that rooms can't be added to regions mid-play.] Some piles of rubble are an unimportant scenery thing in Cave Intersection. Understand "pile" or "tons" or "ton" as the piles of rubble. Every turn when the mysterious passage is at hand (this is the move rubble piles as appropriate rule): move the piles of rubble to Cave Intersection; [default location] if the location is Mystical Cave and the mysterious passage is sealed by cave-in: move the piles of rubble to Mystical Cave. Section - Mysterious Passage [Note that this object did not exist in the original source code -- it is implemented mostly to allow better modeling of the cave-in that is caused when leaving Mystical Cave. This door is given the property "sealed by cave-in" to act as the equivalent to the 'general' attribute of the 'cave_intersection' object in the original source code. The use of private-naming allows a conditional understand rule to be applied, rendering it unreachable with any vocabulary by the player after it is revealed by removal of the steel wall.] An undescribed scenery closed unopenable privately-named door called a mysterious passage is southeast of Cave Intersection and northwest of Mystical Cave. The mysterious passage can be sealed by cave-in. The description of the mysterious passage is "It twists and turns slightly, so you see clear through it. At the furthest bend, just before it fades from sight, you see [if the location is the front side of the mysterious passage]a faint purple glow[else]only darkness[end if]." Understand "wide" or "square" or "hole" or "faint" or "glow" as the mysterious passage when the mysterious passage is described. Understand "purple" as the mysterious passage when the location is the front side of the mysterious passage. [Too many purple things in Mystical Cave already.] Instead of going through the mysterious passage when the steel wall is on-stage (this is the steel wall blocks the mysterious passage rule): if the steel wall is at hand: say "Presumably there is a passage of some sort there, but it's completely sealed by the steel wall."; otherwise: say "Your trip through the tunnel ends abruptly at huge steel wall that completely bars your passage. Mystified, you go back the way you came." Instead of going through the mysterious passage when the mysterious passage is sealed by cave-in (this is the prevent passage after cave-in rule): say "The passage in that direction has been completely blocked by tons of rubble." Instead of going through the mysterious passage from Cave Intersection when the steel wall is off-stage and the mysterious passage is not sealed by cave-in and the player does not bear every fake rod (this is the bar passage to Mystical Cave unless all fake rods collected rule): say "[first time]Well, the hole to the southeast seems obvious enough, but a mysterious force blocks the way! [only]Try as you might, you can't seem to enter [one of]it[or]the hole to the southeast[stopping][if the player bears exactly one fake rod]. Sparks crackle around [the list of visible fake rods born by the player][else if the player bears at least two fake rods]. The rods in your possession vibrate ominously[end if]." After going through the mysterious passage from Cave Intersection when the player bears every fake rod (this is the everything's about to get crazy rule): now every fake rod is off-stage; now the resurrections remaining of the player is zero; engage spell blocking; say "As you enter the tunnel, a peculiar light surrounds you. The four rod pieces you bear crumble into dust!"; continue the action. Section - Steel Wall (steel_wall) A fixed in place thing called a steel wall is in Cave Intersection. "To the southeast, a huge steel wall demonstrates a marked contrast to the otherwise drab surroundings." The description of the steel wall is "A ten-by-ten slab of solid steel, this wall must be at least a foot thick, and is accented by large steel rivets that secure it to the surrounding rock." Understand "steel" or "wall" or "rivets" or "rivet" as the steel wall. Instead of opening the steel wall (this is the not getting through that easy rule): create an expectant pause for the narrator's challenge about cutting equipment; say "I presume you have a blow-torch handy?" The narrator's challenge about cutting equipment is a binary reply. The positive rejoinder of the narrator's challenge about cutting equipment is "Well, then -- By all means, give it a whirl." The negative rejoinder of the narrator's challenge about cutting equipment is "That's OK. I don't even know that word." Instead of pushing or pulling or turning the steel wall (this is the hmmm I guess they didn't install rollers rule): say "Not surprisingly, it doesn't move an inch." Instead of looking under the steel wall (this is the thank god it's not a letter-opener-in-the-keyhole puzzle rule): say "It's flush with the rock floor." After casting a spell at the steel wall (this is the supernatural steel is immune to magic rule): say "The wall seems to absorb and nullify all magic!" Chapter - Cliff Face (Cliff_face) A room called Cliff Face is outside from Entrance Hall and south of Entrance Hall. "You are standing near the top of a snowy mountain peak. The wind is quite cold and is making your teeth chatter. The general vicinity is mostly snow and rock; however, the entrance into the Monastery is to the north, all but hidden from view by the enormous slabs of snow-covered rock that make up the cliff face. There is a rough but obvious trail leading down the mountain to the south. There is also another trail that winds even further up the mountain peak almost hidden in the snow to the east." Some slabs of snow-covered rock and a rough but obvious trail are unimportant scenery in Cliff Face. A cold wind is an unimportant uniquely-named backdrop in Cliff Face. A mountain top is an unimportant distant view in Cliff Face. Understand "peak" as the mountain top. The snow is in Cliff Face. [See "Snow" for declaration of this backdrop.] Section - Entrance to the Monastery A uniquely-named proxy entrance called the entrance to the Monastery is in Cliff Face. The relevant direction of the entrance to the Monastery is north. Chapter - Covered Trail (Covered_Trail) A room called Covered Trail is east of Cliff Face and up from Cliff Face. "You are climbing up a small trail that gets periodically lost in great bluffs of snow. The swirling snow makes seeing an unusual effort. The trail leads downwards to a cliff face to the west, and rises towards the mountain top to the north." Some great bluffs are unimportant scenery in Covered Trail. The mountain top is in Covered Trail. [See "Cliff Face" for declaration of this backdrop.] The trail is in Covered Trail. [See "Flower Garden" for declaration of this backdrop.] The snow is in Covered Trail. [See "Snow" for declaration of this backdrop.] Chapter - Mountain Peak (Mountain_peak) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether the snowy outcropping had collapsed. This implementation moves the flag (and associated logic) to the "Snowy Outcropping" room. See next chapter for details.] A room called Mountain Peak is north of Covered Trail and up from Covered Trail. "You are standing on the top of a peak of the Gray Mountains. A cold wind blows snow everywhere, obscuring what would otherwise surely be a wonderful view of the surrounding countryside. You can just make out some buildings to the far south in Frostham. A snowy bluff marks the way back down[if Snowy Outcropping is not relocated], or to the west, there is a snowy outcropping. It seems to hang precariously over the edge of the mountain, however[end if]." A wonderful view of the surrounding countryside and a snowy bluff are unimportant scenery in Mountain Peak. Some proper-named uniquely-named things called the Gray Mountains are an unimportant distant view in Mountain Peak. An unimportant uniquely-named scenery thing called the peak of the mountain is in Mountain Peak. The cold wind is in Mountain Peak. [See "Cliff Face" for declaration of this backdrop.] The snow is in Mountain Peak. [See "Snow" for declaration of this backdrop.] The buildings are in Mountain Peak. [See "Downtown New Borphee" for declaration of this backdrop.] Instead of going from Mountain Peak to Snowy Outcropping when Snowy Outcropping is relocated (this is the sorry sir but that outcropping departed some time ago rule): say "Looks like the outcropping completely collapsed!" To warn about outcropping weight limit: say "As you start to tread out to the outcropping, you feel the snow beneath your feet shifting under your weight. You beat a hasty retreat back to the peak." Instead of going from Mountain Peak to Snowy Outcropping when the player bears anything the first time (this is the are you sure you want to carry all that stuff out there rule): warn about outcropping weight limit. The are you sure you want to carry all that stuff out there rule is listed after the sorry sir but that outcropping departed some time ago rule in the instead rules. Instead of going from Mountain Peak to Snowy Outcropping when the player bears anything (this is the I guess it's a good thing monks don't eat much rule): if a random chance of 6 in 10 succeeds: warn about outcropping weight limit; otherwise: say "As you start to tread out to the outcropping, you feel the snow beneath your feet shifting under your weight. You start to turn back, but the entire outcropping collapses beneath you, sending you hurtling off the edge into oblivion."; end the game in death. The I guess it's a good thing monks don't eat much rule is listed after the are you sure you want to carry all that stuff out there rule in the instead rules. Instead of jumping in Mountain Peak (this is the don't jump from the mountain top rule): say "Not advisable, it's probably a long way down..." After going to Snowy Outcropping from Mountain Peak (this is the describe care in entering Snowy Outcropping rule): say "You carefully make your way onto the outcropping."; continue the action. After sermonizing in Mountain Peak when the second noun is nothing (this is the take an opportunity for a lame but inexplicably compelling joke rule): say "You tell it on the mountain." Chapter - Snowy Outcropping (Snowy_outcropping) [Note that, in the original source code, the Mountain_peak object made use of the I6 'general' attribute to track whether the snowy outcropping had collapsed. This implementation renames the flag to the more descriptive 'relocated' and modifies associated logic accordingly.] A room called Snowy Outcropping is west of Mountain Peak. "You are standing on a snow-covered outcropping. You are almost waist-deep in snow, and the blisteringly cold winds aren't helping. The outcropping juts out alarmingly over the western edge of the mountain. In fact, you can see the Monastery steeple below this ledge. The main portion of the mountain peak lies to the east." Snowy Outcropping can be relocated. Some blisteringly cold winds and a view of the Monastery steeple are unimportant scenery in Snowy Outcropping. The snow is in Snowy Outcropping. [See "Snow" for declaration of this backdrop.] The mountain top is in Snowy Outcropping. [See "Cliff Face" for declaration of this backdrop.] Every turn while the player is in Snowy Outcropping (this is the set the stage for an avalanche rule): if a random chance of 3 in 5 succeeds: say "There is an ominous creaking noise somewhere underfoot."; otherwise: say "Some snow falls off the outermost edge of the outcropping." After going to Mountain Peak from Snowy Outcropping (this is the describe care in departing Snowy Outcropping rule): say "You cautiously make your way back to the mountain top."; continue the action. Instead of going nowhere from Snowy Outcropping when the current action is going down (this is the no way to get down from here rule): say "That's not a very sound idea." Instead of jumping in Snowy Outcropping (this is the jumping from the outcropping is not acceptable suicide rule): say "Let's not be suicidal." [Note that this response has been modified from the original since an insta-death seems unwarranted, and there seems to be no qualitatively different reason that this version of the avalanche would kill you.] After dropping something in Snowy Outcropping (this is the dropping something triggers an avalanche rule): say "[The noun] lands in the snow with a small 'pluff' sound."; trigger the avalanche. After yelling in Snowy Outcropping (this is the yelling in Snowy Outcropping triggers an avalanche rule): say "You give the best bellow you can muster, given the current weather conditions."; trigger the avalanche. After sneezing in Snowy Outcropping (this is the sneezing in Snowy Outcropping triggers an avalanche rule): say "Understandable, given the weather conditions."; trigger the avalanche. [Note that the random result logic for these responses found in the original has been modified to a) always give at least one warning, and b) use a 1 in 2 chance with the same odds as the original's 5 in 10 chance.] To warn against the obvious approach: say "As you reach for the scroll, you hear a disturbing rumbling from somewhere underfoot, and you step back hastily." Instead of taking or touching or pushing or pulling the dirty scroll in Snowy Outcropping the first time (this is the warn player about instability of the outcropping rule): warn against the obvious approach. Instead of taking or touching or pushing or pulling the dirty scroll in Snowy Outcropping (this is the can't make it too easy for the player rule): if a random chance of 1 in 2 succeeds: warn against the obvious approach; otherwise: update the world post-avalanche; say "As you reach for the scroll, the entire outcropping lurches alarmingly! It breaks away in a terrific avalanche, and you plummet to your death."; end the game in death. [Note that the following rules are somewhat modified from the original. The successful response for setting off the avalanche by "answering it that" to yourself is changed for flavor. The original code also seemed to want to intercept attempts to speak to something other than yourself, but this does not appear to be functional in the compiled game (at least for Release 3/Serial number 960606), as the action processing is short-circuited by a parser error. ("You can only do that to something animate.") My guess is that this is because the default I6 grammar line for the Answer action uses a "creature" token, and no extended grammar is provided by Mr. Yu. Since this is an easily-corrected oversight, the "answering it that" grammar is modified in this implementation to honor the apparent original intent. However, since built-in I7 behavior for answering it that will automatically supply "yourself" as the thing being spoken to, and since I can't think of a reason why the target of the speech should affect its ability to set off the avalanche, talking to anything will work in this implementation. An alternate rule is supplied if the original logic is desired.] After answering yourself that something in Snowy Outcropping (this is the talking to yourself can have bad consequences rule): say "As the sound of your voice fades, a steady rumble from below takes its place."; trigger the avalanche. After answering something that something in Snowy Outcropping when the noun is not the player (this is the talking to objects here causes avalanche rule): say "[The noun] groans in response. Or did it? The groaning builds into a rumble beneath you."; trigger the avalanche. [Alternate rule to match apparent originally-intended logic: Instead of answering something that something in Snowy Outcropping when the noun is not the player (this is the can't talk to objects here rule): say "To whom, exactly?" ] To update the world post-avalanche: now Snowy Outcropping is relocated; now the dirty scroll is in Steeple Roof. To trigger the avalanche: update the world post-avalanche; say "[line break]Unfortunately, you seem to have disturbed something, as the entire outcropping gives way in a brief but powerful avalanche! You tumble through the air, followed by massive quantities of snow. Amidst the chaos around you, you glimpse the Monastery steeple rushing up to meet you.[paragraph break][bold type]THUMP![roman type][paragraph break]You lie dazed for a moment. Miraculously, the dirty scroll lands with a quiet 'flump!' next to you."; move the player to Steeple Roof. [IMPDO - rework this puzzle to be more interesting.] [IMPDO - why doesn't the PC lose possessions in the avalanche?] Section - Dirty Scroll (dirty_scroll) A scroll called a dirty scroll is in Snowy Outcropping. "There is a dirty scroll here[if the location is Snowy Outcropping and the dirty scroll is not handled], practically buried in the snow[end if][if the location is Steeple Roof and the dirty scroll is not handled], poking out of the snow nearby[end if]." The dirty scroll is inscribed with swanko. Chapter - Rocky Mountain Trail (rocky_trail) A room called Rocky Mountain Trail is down from Cliff Face and south of Cliff Face. "You are on a rocky trail that winds up and down a mountain. Patches of snow can be found here and there. The trail continues down the mountain to the south, or up to the north." An unimportant backdrop called a mountain trail is in Rocky Mountain Trail. Understand "rocky" as the mountain trail. The snow is in Rocky Mountain Trail. [See "Snow" for declaration of this backdrop.] Chapter - Snowy Intersection (snowy_intersection) [Note that the original source code made use of the I6 'general' attribute of this object as part of the logic for triggering the return to the Mystical Cave upon successful planting of the silver rod piece (see 'stone_marker_top' and 'purple_sphere' objects). This implementation uses I7 scene functionality for the equivalent logic test.] A room called Snowy Intersection is down from Rocky Mountain Trail and south of Rocky Mountain Trail. "You are at a snow-filled crossroads in a mountain trail. Paths lead north towards the top of the mountain, east, west, and south towards the base of the mountain[if Planting the Silver Rod Piece is happening][paragraph break]Something seems familiar, yet different, about this place.[end if]." A snow-filled crossroads is an unimportant uniquely-named scenery thing in Snowy Intersection. Understand "paths" or "path" or "intersection" as the snow-filled crossroads. The mountain trail is in Snowy Intersection. [See "Rocky Mountain Trail" for declaration of this backdrop.] The snow is in Snowy Intersection. [See "Snow" for declaration of this backdrop.] [Note that the following response doesn't exist in the original.] Instead of going up from Snowy Intersection (this is the absolutely no way no how rule): say "Well, there [italic type]is[roman type] some sort of cave in the cliffside, hundreds of feet up. It's not clear how you could possibly get up there, though." Instead of going nowhere from Snowy Intersection when the current action is going east (this is the eastern path is a false path rule): say "After traveling a short distance, you discover that the path east is blocked by a huge snow drift. [one of]Y[or]Frustrated, y[stopping]ou trudge back to the intersection." Instead of going somewhere from Snowy Intersection during Planting the Silver Rod Piece (this is the restrict movement when planting the silver rod rule): say "The path [noun] ends after a short distance." After searching the snow in Snowy Intersection when the snow is concealing the tip (this is the can find the obelisk top when location is known rule): now the snow is not concealing the tip; accomplish silver-rod-recovery; now the broken stone top is in Snowy Intersection; say "Remembering where the stone marker top fell, you brush aside some snow. Sure enough, there it is!" Section - Cliffside Cave [Note that this object doesn't exist in the original.] An unimportant distant view called a cliffside cave is in Snowy Intersection. Section - Stone Marker (stone_marker) [Note that, in the original source code, this object made use of the I6 'general' attribute to track whether it was *not* damaged. This implementation uses the more descriptive property "damaged" and reverses the logic associated with the flag to preserve the meaning.] A stone marker is fixed in place in Snowy Intersection. "There is a large stone marker here, in the center of the intersection." The stone marker can be damaged. The stone marker is damaged. The description of the stone marker is "This odd stone structure, partially covered in snow, looks quite old and mysterious. It's about seven feet tall, and is shaped like an obelisk[if the stone marker is damaged], with the top partially broken off[end if]." Understand "obelisk" or "odd" or "structure" as the stone marker. Instead of taking the stone marker (this is the obelisk is too heavy to move rule): say "The obelisk is taller than you are, made of solid stone, and far too heavy to carry around with you." Section - Broken Stone Top (stone_marker_top) [Note that some of the logic associated with this object in the original source code has been moved to the rules associated with a scene ("Planting the Silver Rod Piece") in this implementation. See that scene's section. Also note that this container is intended to be fixed in place but this is not enforced via the I7 property, only an "instead of taking..." rule.] There is a container called a broken stone top. The description of the broken stone top is "The top pinnacle from the stone marker. You notice that it's partially hollow inside." The size of the broken stone top is 10. Understand "pinnacle" as the broken stone top. Instead of taking the broken stone top (this is the can't take the broken stone top rule): say "The obelisk's former top is too heavy to lift." Rule for printing room description details of the broken stone top when the broken stone top is empty (this is the tidy up the broken stone top room description details rule): stop. Chapter - Top of Snowy Slope (Top_of_drop) [Note that the original source code contains a small routine to intercept attempts to go up from this location and trigger an attempt to climb the tree -- but only when the tree1 object's I6 'general' attribute is set, which happens after the player climbs it the first time. It seems a little capricious and the kind of thing more likely to cause pain than pleasure for the player, so that feature is left out here.] A room called Top of Snowy Slope is west of Snowy Intersection. "You're at the top of a short downward slope into a snowy area below you to the west. A path leads east. A lone tree stands here, overlooking the slope." A short slope is an unimportant backdrop in Top of Snowy Slope. Understand "downward" as the short slope when the location is Top of Snowy Slope. The snow is in Top of Snowy Slope. [See "Snow" for declaration of this backdrop.] Section - Tree (tree1, tree2) [Note that the original source code implements this tree as two objects, tree1 and tree2. They are combined as a single thing in this implementation. Also note that the logic for moving the player around has been modified to use normal movement instead of the equivalent of the I6 PlayerTo() function, and some of it is migrated to the section for the "Top of Tree" room.] A vegetable-like backdrop called a tree is in Top of Snowy Slope. The description of the tree is "[if the location is Top of Snowy Slope and Top of Tree is not visited]A leafless, bare tree, with what might be a bird's nest in it[otherwise if the location is Top of Snowy Slope]A leafless, bare tree, with a bird's nest in it[else]Overall, there's nothing terribly special about this tree[end if]." Understand "lone" or "leafless" or "bare" as the tree. Instead of climbing the tree (this is the translate climbing the tree as going up rule): try going up instead. Section - View of the Nest (nest1) [Note that the name of this thing has been modified slightly from the original, to a "view of the nest" versus just a "nest," due to the fact that the behavior is clearly intended to indicate the nest can't be interacted with from this location. Also, note that some logic for the corresponding object in the original source code that is relevant to the I6 LetGo fake action is handled here with a rule for the taking action, due to the operation of the 6G60 Standard Rule "convert remove to take".] A scenery thing called a view of the nest is in Top of Snowy Slope. The description of the view of the nest is "[if Top of Tree is visited]Even from down here, it's a pretty big nest. Thankfully, no big birds seem to be present[otherwise]A sizable tangle of sticks lodged amongst the branches. It's hard to be sure about exactly what it is from down here[end if]." Instead of searching the view of the nest (this is the your arms aren't that long rule): say "You can't see into it from down here." After throwing something at the view of the nest (this is the need to be closer to hit the nest rule): now the noun is in Top of Snowy Slope; say "You take aim, but miss. [The noun] falls to the ground nearby." To indicate that the nest is out of reach: say "You can't reach it from here[one of]. Perhaps you can get closer?[or].[stopping][conditional paragraph break]". Instead of rubbing or turning or taking or pushing or pulling or touching or attacking or shaking the view of the nest (this is the can't physically interact with the view of the nest rule): indicate that the nest is out of reach. Instead of inserting something into the view of the nest (this is the can't put things into the view of the nest rule): indicate that the nest is out of reach. Instead of taking something when the noun is in the view of the nest (this is the can't remove things from the view of the nest rule): indicate that the nest is out of reach. Instead of searching or looking under the view of the nest (this is the can't search the view of the nest rule): say "From down here, it's hard to see anything but the bottom of the nest." Chapter - Bottom of Snowy Slope (Bottom_of_drop) A room called Bottom of Snowy Slope is down from Top of Snowy Slope and west from Top of Snowy Slope. "You've made your way down to a small snow-covered clearing, ringed by pine trees. The only exit is back up the slope." A snow-covered clearing and some pine trees are unimportant scenery in Bottom of Snowy Slope. The pine trees are vegetable-like. The short slope is in Bottom of Snowy Slope. [See "Top of Snowy Slope" for declaration of this backdrop.] Understand "upward" as the short slope when the location is short slope. The snow is in Bottom of Snowy Slope. [See "Snow" for declaration of this backdrop.] Section - Large Boulder (boulder) [Note minor modifications to pallet/boulder interaction logic due to a more complex pallet implementation here, as compared to the original. New authors note the use of a substitution "[sleeping pallet]" in the initial appearance to mark it as mentioned, so that the room-description rules will not mention it twice.] A fixed in place supporter called a large boulder is in Bottom of Snowy Slope. "There's a large boulder here[if the sleeping pallet is on the large boulder and the sleeping pallet is unfurled], over which is draped your [sleeping pallet][otherwise], sitting squat in the middle of the clearing[end if][if the egg shards are on the large boulder]. At the base of the boulder are the remains of a large egg[end if]." The description of the large boulder is "A big, snow-covered rock." Understand "rock" as the large boulder. Instead of pushing or pulling or turning the large boulder (this is the boulder is too large for mobility rule): say "It must weigh a ton." After putting the sleeping pallet on the boulder (this is the hint pallet must be unrolled rule): say "[The sleeping pallet] now squats atop the boulder." Instead of unrolling the sleeping pallet when the sleeping pallet is on the large boulder and not only the sleeping pallet is on the large boulder (this is the can't cover things up it's too complicated for a lazy writer to deal with rule): say "You'll need to remove the other items from the boulder, first." After unrolling the sleeping pallet when the sleeping pallet is on the large boulder (this is the there's a blow to be cushioned rule): say "You drape the pallet over the boulder. Its edges now touch the ground." Definition: The boulder is padded if the unfurled sleeping pallet is on it. After putting the prayer book on the padded boulder (this is the a hint nobody will ever discover rule): say "[The prayer book] lands atop the large boulder with a muffled 'thud.'" Chapter - Top of Tree (Top_of_tree) A room called Top of Tree is up from Top of Snowy Slope. "You're on top of the tree, on some lower branches that seem pretty stable." The tree is in Top of Tree. [See "Top of Snowy Slope" for declaration of this backdrop.] [Some of the following behaviors are not in the original, but I took the liberty of adding them for realism.] Instead of going nowhere in Top of Tree when the noun is up (this is the can't climb higher in tree rule): say "Studying the foliage above you, you can't see any way to make further progress up the tree." After going from Top of Snowy Slope to Top of Tree (this is the provide flavor for climbing the tree rule): say "You clamber up the tree."; continue the action. After jumping in Top of Tree (this is the why are people compelled to jump rule): if the player is gravity-resistant: say "You jump from the branch and float to the ground below."; move the player to Top of Snowy Slope; otherwise: say "You fling yourself outward, enjoying a short-lived moment of freedom before impact."; end the game in death. Every turn (this is the tree has no floor rule): If at least one portable thing that is not the player is in Top of Tree: let fallen stuff be the list of portable things in Top of Tree; if the player is listed in fallen stuff: remove the player from fallen stuff; if the location is Top of Tree: say "You hear [fallen stuff with definite articles] fall to the ground below."; repeat with fallen item running through fallen stuff: now fallen item is in Top of Snowy Slope. Section - Nest (nest2) [Note that the original source code declared this object with the I6 'transparent' attribute. In terms of scope resolution and visibility, this would not provide any different behavior than the 'open' attribute, so it is left out of this implementation. Also note that the response when throwing something at the nest has been altered because it seems inconsistent that you can't hit the nest but you can hit the egg in the original version.] A fixed in place container called a nest is in Top of Tree. "There's a large bird's nest on a nearby branch, some distance away from you[if the corbie egg is in the nest]. An egg is nestled snugly within the nest, nearly filling it[end if]." The description of the nest is "Given the size and recalling Brother Joseph's lessons in ornithology, you'd guess that it's a corbie's nest[first time]. It looks abandoned; at least, the mother corbie is nowhere in sight[only]." The size of the nest is 10. Understand "corbie" or "abandoned" as the nest. To wobble the nest: say "[line break]The nest bobs gently for a bit, before returning to a standstill." [IMPDO - possible "guess the verb" issue - make it possible to build up enough wiggle over three turns with resonance? Allow some resonance but not enough to free the egg?] Instead of taking the nest (this is the is it really the nest you want rule): say "[one of]You eye the branches around you. None of them seem strong enough to support your weight, including the one bearing the nest[or]It's way out on a thinner branch that probably won't support your weight[stopping]." Instead of inserting something into the nest (this is the can't put things into the nest rule): say "You can't quite reach it to put anything into it." Instead of pushing or pulling or rubbing or touching or attacking or shaking the nest (this is the flailing wildly won't help here rule): indicate that the nest is out of reach. Instead of looking under the nest (this is the now you're getting it rule): say "It seems to be sitting on some branches." After throwing something at the nest (this is the can't knock the nest out of the tree rule): now the noun is in Top of Snowy Slope; say "[The noun] bounces harmlessly off of the nest, and you hear [object pronoun of the noun] land below[first time]. You recall Brother Joseph extolling the corbie's exceptional sense of structural engineering in one of his more enthusiastic lectures[only]." Section - Branches (branch) [This thing is changed somewhat from the original version to offer more hinting.] Some branches are a vegetable-like scenery thing in Top of Tree. The description of the branches is "Some leafless, thin tree branches." Understand "leafless" or "thin" or "branch" as the branches. Instead of taking the branches (this is the branches aren't removable rule): say "While they're not sturdy enough to support your weight, they are sturdy enough to prevent you from simply snapping them off." Instead of climbing the branches (this is the branch will not support weight of PC rule): say "They are, unfortunately, too small to support you. The moment you put any real weight on them, they bend precipitously."; wobble the nest. [We need instead rules for these because the branches are scenery and therefore fixed in place, so various Standard Rules will prevent the actions from completing successfully.] Instead of pushing or pulling or turning or folding or swinging or shaking the branches when the corbie egg is not in the nest (this is the generic branch-shaking rule): say "You give the branches a vigorous swing. A bit of snow falls."; wobble the nest. Instead of pushing or pulling or turning or folding the branches while the corbie egg is in the nest (this is the I guess Bender is the PC rule): say "The branches are flexible enough to bend somewhat, but you're not strong enough to break them."; wobble the nest. Instead of waving the branches (this is the silly rabbit waving is for carried things rule): say "To really [italic type]wave[roman type] them, you'd have to detach them from the tree first." Instead of putting something on the branches (this is the avoid default non-supporter rule for branches rule): say "[The noun] would roll right off!" Check swinging the branches (this is the reroute swinging branches to shaking them to avoid block swinging rule): try shaking the branches instead. After shaking the branches while the corbie egg is in the nest (this is the shaking the branches shakes the nest rule): say "You give the branches a good shake. The egg pops free and tumbles to the ground below![paragraph break]You see the egg land in a soft patch of snow, and roll down the slope. Moments later, you hear a dull "; if the sleeping pallet is on the boulder: now the corbie egg is in Bottom of Snowy Slope; say "thump "; otherwise: remove the corbie egg from play; now the egg shards are on the boulder; say "crack "; say "from below." After attacking the branches (this is the assaulting the branch should offer a hint rule): say "You hammer uselessly on the branches, which succeeds in sending a brief cascade of snow to the ground below, but little else."; wobble the nest. Section - Corbie Egg (corbie_egg) [Note that the logic of the baking-related after rule here is part of the Baking_Pan object in the original source code. Also note the use of private-naming to allow conditional application of names.] A scored edible thing called a corbie egg is in the nest. It is privately-named. The description of the corbie egg is "A large, speckled [if we have examined the nest]corbie [end if]egg." The size of the corbie egg is 5. Understand "corbie" or "egg" as the corbie egg. Understand "large" or "speckled" as the corbie egg when the corbie egg is not enpanned. Understand "bit" or "bit of" or "raw" or "yolk" or "whites" as the corbie egg when the corbie egg is enpanned. Instead of taking or rubbing or pushing or pulling or touching or squeezing or turning or shaking the corbie egg when the corbie egg is in the nest (this is the can't reach the nest can't reach the egg either rule): indicate that the nest is out of reach. After looking under the corbie egg when the corbie egg is in the nest (this is the it's supporters all the way down rule): say "It seems to be in a nest." After attacking the corbie egg (this is the I know egg foo rule): remove the corbie egg from play; now the egg shards are in the holder of the player; say "The egg breaks easily, covering you with egg goop. What a mess." After throwing something at the corbie egg while the corbie egg is in the nest (this is the not a well-thought-out plan rule): now the noun is in Top of Snowy Slope; remove the corbie egg from play; now the egg shards are in Top of Snowy Slope; say "Good toss! A bit too strong, though. [The noun] knocks the egg out of the nest with a dull crack, and they both fall to the ground below." [Note the slight change from the original; egg shells are left behind.] After inserting the corbie egg into the baking pan (this is the convert egg to mess rule): now the printed name of the corbie egg is "bit of raw egg"; now the description of the corbie egg is "The yolk and whites of an egg."; now the egg shards are handled; now the egg shards are in the holder of the player; say "You crack the egg and drop the gooey contents into the pan, discarding the shell." Section - Egg Shards (egg_shards) [Note slight changes from the original in terms of parseable names and variable description.] There is a thing called some egg shards. "There are some shards of broken eggshell here, scattered all over[unless the egg shards are handled]. Some gooey egg stuff, too[end if]." The description of the egg shards is "Some large pieces of shell is all[unless the egg shards are handled], in a mess of yolk and whites[end if]." The size of the egg shards is 5. Understand "eggshell" or "egg shell" or "shell" or "shells" or "pieces" as the egg shards. Understand "yolk" or "whites" or "gooey" or "stuff" or "yolk and whites" or "mess" or "mess of" as the egg shards when the egg shards are unhandled. [These behaviors are new vs. the original] After taking the egg shards when the egg shards were unhandled (this is the OK you can have the egg shell bits rule): say "You pluck the pieces of eggshell from the mess." Chapter - North of Frozen River (North_of_river) [Note that the original source code made 'lake' a room synonym, but the way that is is described indicates that it is not actually present in the location, so this implementation gives it special rules in case the user tries to interact with it.] A room called North of Frozen River is south of Snowy Intersection. "You are standing just north of a frozen river (probably a tributary of Lake Dinge). You can just see the south bank from here, where the trail continues. There is no bridge, however. A trail also continues north." A north bank, an interrupted trail, and some banks are unimportant backdrops in North of Frozen River. An unimportant backdrop called a frozen river is in North of Frozen River. The view of the south bank is an unimportant distant view in North of Frozen River. The printed name of the view of the south bank is "south bank". The north bank and the view of the south bank are uniquely-named. Section - Absent Bridge An absent fixed in place thing called a bridge is in North of Frozen River. Section - Concept of Lake Dinge A proper-named scenery thing called the concept of Lake Dinge is in North of Frozen River. The printed name of the concept of Lake Dinge is "Lake Dinge". Instead of doing something when the current action involves the concept of Lake Dinge (this is the Lake Dinge isn't in this game rule): say "This river may lead to Lake Dinge, but you can't see the lake from here." Chapter - Midst Frozen River (Frozen_river) [Note that the name of this location is modified from the original to limit parser issues with rooms whose name start with "on". The printed name property is given the same value as the original.] A room called Midst Frozen River is south of North of Frozen River."You are standing on a wide, smooth river of ice. The river [']runs['] east to west, and there are banks to the north and south." The printed name of Midst Frozen River is "On Frozen River". Midst Frozen River is in Icy Surface. The view of the south bank and the banks are in Midst Frozen River. [See "North of Frozen River" for declaration of these backdrops.] The view of the north bank is in Midst Frozen River. [See "South of Frozen River" for declaration of this backdrop.] Instead of going from Midst Frozen River to Upriver (this is the lose your footing trying east rule): say "You try to head upriver and lose your footing on the slick ice, sliding back to where you started." Instead of going nowhere from Midst Frozen River when the current action is going west (this is the slip and slide trying west rule): say "As you try to move westward, your feet slip and slide. Eventually, you give up, having gone nowhere." Instead of scattering the sand in Midst Frozen River (this is the interpret sand scattering as dropping the sand rule): try dropping the sand instead. After dropping the sand in Midst Frozen River (this is the sand gives traction rule): accomplish gaining-traction; say "You scatter the sand onto the ice." Instead of going from Midst Frozen River to South of Frozen River when the sand is not in Midst Frozen River (this is the can't get southbound traction on frozen river without sand rule): say "As you try to reach the southern bank, you slide and flounder helplessly on the ice!" After going from Midst Frozen River to South of Frozen River when the sand is in Midst Frozen River (this is the explain traction rule): say "You tread lightly on the sand-covered portion of the ice, and scramble to the south bank."; continue the action. Chapter - Upriver (Frozen_river2) There is a room called Upriver. "You are standing on a wide smooth river of ice. The river [']runs['] east to west. To the north and south are huge snow bluffs that obscure most of the surrounding countryside." Upriver has some text called internal name. The internal name of Upriver is "On Frozen River (upstream)". The printed name of Upriver is "On Frozen River". West from Upriver is Midst Frozen River. Upriver is in Icy Surface. Instead of going nowhere from Upriver when the current action is going east (this is the can't go further upriver rule): say "After a few unsteady steps eastward, you give up before you lose your footing completely. It's too slippery to proceed." After going west from Upriver (this is the describe one-way sliding journey rule): say "As you step west, a slight downwards slope in the ice sends you sliding uncontrollably. You come to a stop some distance downriver."; continue the action. Section - Scrawled Parchment (p7) A parchment called a scrawled parchment is in Upriver. The description of the scrawled parchment is "'Red beats smoke,[line break]Silver bests clouds,[line break]Green defeats depths,[line break]Brown stops earth.'" Chapter - South of Frozen River (South_of_river) A room called South of Frozen River is south of Midst Frozen River. "You are standing just south of a frozen river. You can just see the north bank from here, where the trail picks up again. The only way to get there is across the river. A trail heads south into a valley." The south bank, the interrupted trail, and the banks are in South of Frozen River. [See "North of Frozen River" for declaration of these backdrops.] The frozen river is in South of Frozen River. [See "North of Frozen River" for declaration of this backdrop.] The view of the north bank is an unimportant distant view in South of Frozen River. The printed name of the view of the north bank is "north bank". The south bank and the view of the north bank are uniquely-named. Chapter - Valley Trail (Valley_trail) A room called Valley Trail is south of South of Frozen River and north of Frostham Outskirts. "You are walking along a valley trail, just below a portion of the Gray Mountain ranges. You can see the beginnings of a city to the south, while the trail winds further into the mountain ranges to the north." A trail and some mountain ranges are unimportant scenery in Valley Trail. A thing called the beginnings of a city is unimportant scenery in Valley Trail. The Gray Mountains are in Valley Trail. [See "Mountain Peak" for declaration of this backdrop.] Part - Special Locations, Hades [SPIRIT.INF] [Note that the original source code used a class called Hades_Room_Class to provide the same description and before() rules to multiple locations. This implementation does something similar using a combination of a room-based kind and a region.] Section - Fiery Realm Fiery Realm is a region. An empty space, a wall of flame, and a ball of fire are unimportant backdrops in Fiery Realm. Understand "flames" as the wall of flame. [This next rule is to add some more flavor to the realm of Hades, since players need something to occupy their time for a few turns to allow a chance for the wisp to appear, and to also provide a nudge towards the way to accelerate its appearance (see below). It is a before rule so that it can trigger prior to the "pretend we are I6 for synonyms of room objects" rule in the instead rules.] Before examining something in Fiery Realm when the noun is the wall of flame or the noun is the ball of fire (this is the heh heh fire fire fire rule): say "The flames [one of]dance[or]flicker[or]swirl[or]flare[or]scintillate[or]quiver[or]shimmer[or]coruscate[or]glow[or]whirl[or]churn[or]roil[or]curl[at random][one of] hypnotically[or] in an entrancing manner[or] and hold you spellbound[or], and you find yourself momentarily enthralled[or], fascinating you[or], pulling at your attention like a magnet[or], transfixing your gaze[or] enticingly[or] alluringly[at random]."; rule succeeds. [force success] [Note that the original source code's logic had variable action exclusions for Hades_5 vs. other rooms of the Hades_Room_Class, but this implementation does not.] To explain the lack of materiality: say "You currently lack the means to do that." Instead of doing something when the current action is not going and the current action is not looking and the current action is not examining and the current action is not waiting and the current action is not entering and the current action is not meditating and the location is in Fiery Realm (this is the out-of-body experience limits actions rule): explain the lack of materiality. [Since the previous rule doesn't exclude examining, and the player object will still be present to examine, this rule adds a bit of flavor to patch the flaw introduced. Note that this must be an instead rule (as opposed to an after rule) because examining seems to print out text that won't be suppressed by the after routine. (It does not use report rules but instead prints directly from within its carry out rules.)] Instead of examining the player in Fiery Realm (this is the not what you typically see in the mirror rule): say "You are distressingly insubstantial at the moment."; rule succeeds. [force success] [See starting note of the following section for details on the following rules.] Before going in Fiery Realm (this is the reset room visited status when going in Hades rule): now the location is unvisited. To describe passage through the veil of flame: say "You find yourself floating through the flaming wall. As you pass through you feel a gut-wrenching sensation[first time]. Well, perhaps you would if you currently had a gut, or sensations for that matter. Let's just say that you feel something akin to a gut-wrenching sensation, and leave it at that[only]." Instead of going nowhere in Fiery Realm (this is the ring of fire rule): describe passage through the veil of flame; try looking. After going in Fiery Realm (this is the good thing that wisp's around rule): describe passage through the veil of flame; continue the action. [Being purely at the mercy of the random number generator for the first clue of how to navigate the realm of Hades seems cruel beyond what even an old-school enthusiast will endure. The frequency of the path signaling is increased compared to the original, and the player can now force it to appear if they hit on the right method.] To invoke the will-o-wisp of the netherworld: say "A wisp of smoke appears [cynosure of the location], then fades." After meditating in Fiery Realm (this is the assist reflective players in Hades rule): say "[first time]You close your eyes, but the view is unchanged. Then you realize you have no eyes.[paragraph break][only]Though your lack of eyelids makes it more difficult than usual, the mesmerizing effect of the flames [one of]around you makes concentrating deeply easier than you might have guessed[or]soon absorbs your ego[stopping]. After a brief eternity, something different catches your eye...". To decide if the wisp is invoked: if the current action is meditating, decide yes; if a random chance of 1 in 8 succeeds, decide yes; [frequency increased] decide no. Every turn when the location is in Fiery Realm and the location provides cynosure (this is the offer hints on the fire maze rule): if the wisp is invoked: invoke the will-o-wisp of the netherworld. Section - Underworld Room (Hades_Room_Class) [Note that, in the original source code, this class had an I6 before() routine for the Go action that included a command to set the room to unvisited, then to print some text. The text has been moved to the "ring of fire" rule in the preceding section, but the intent of setting the room to unvisited is not entirely clear. It may simply be to prevent multiple versions of "Hades" from showing up in response to the default "places" command (showing visited locations), which I think was available in I5.5. Examining the way the working game functions, it seems that the purpose of doing so is to make it seem as if each transition through the flames brings the PC to a new location, in a way that is consistent with the verbose, brief, and superbrief settings. (It seems that the I5.5 library behavior would automatically print out the room description any turn the player was in an unvisited location.) Since the same behavior does not seem evident in I7 6G60, the logic varies somewhat but should produce the same effect as the original.] An underworld room is a kind of room. An underworld room has some text called internal name. An underworld room has some text called cynosure. The cynosure of an underworld room is usually "nearby". The description of an underworld room is usually "You are floating in an empty space. Surrounding you on all sides is a great wall of flame. It would almost seem like you are trapped inside a ball of fire." The printed name of an underworld room is usually "Hades". Every underworld room is in Fiery Realm. Chapter - Hades One (Hades_1) Hades One is an underworld room. The internal name of Hades One is "Hades 1". The cynosure of Hades One is "to the northeast". Up from Hades One is Hades One. Down from Hades One is Hades One. North from Hades One is Hades One. South from Hades One is Hades One. East from Hades One is Hades One. West from Hades One is Hades One. Inside from Hades One is Hades One. Outside from Hades One is Hades One. Northeast from Hades One is Hades Two. Northwest from Hades One is Hades One. Southeast from Hades One is Hades One. Southwest from Hades One is Hades One. Chapter - Hades Two (Hades_2) Hades Two is an underworld room. The internal name of Hades Two is "Hades 2". The cynosure of Hades Two is "to the south". Up from Hades Two is Hades One. Down from Hades Two is Hades One. North from Hades Two is Hades Two. South from Hades Two is Hades Three. East from Hades Two is Hades One. West from Hades Two is Hades Two. Inside from Hades Two is Hades One. Outside from Hades Two is Hades One. Northeast from Hades Two is Hades Two. Northwest from Hades Two is Hades One. Southeast from Hades Two is Hades Two. Southwest from Hades Two is Hades Two. Chapter - Hades Three (Hades_3) Hades Three is an underworld room. The internal name of Hades Three is "Hades 3". The cynosure of Hades Three is "above". Up from Hades Three is Hades Four. Down from Hades Three is Hades Three. North from Hades Three is Hades Two. South from Hades Three is Hades One. East from Hades Three is Hades One. West from Hades Three is Hades Two. Inside from Hades Three is Hades Three. Outside from Hades Three is Hades One. Northeast from Hades Three is Hades Two. Northwest from Hades Three is Hades One. Southeast from Hades Three is Hades Three. Southwest from Hades Three is Hades Three. Chapter - Hades Four (Hades_4) Hades Four is an underworld room. The internal name of Hades Four is "Hades 4". The cynosure of Hades Four is "to the north". Up from Hades Four is Hades Three. Down from Hades Four is Hades Three. North from Hades Four is Hades Five. South from Hades Four is Hades Two. East from Hades Four is Hades One. West from Hades Four is Hades Four. Inside from Hades Four is Hades Four. Outside from Hades Four is Hades One. Northeast from Hades Four is Hades One. Northwest from Hades Four is Hades Three. Southeast from Hades Four is Hades Three. Southwest from Hades Four is Hades One. Chapter - Hades Five (Hades_5) Hades Five is an underworld room. The internal name of Hades Five is "Hades 5". The cynosure of Hades Five is "from [the flaming sphere]". Up from Hades Five is Hades One. Down from Hades Five is Hades Three. North from Hades Five is Hades Two. South from Hades Five is Hades Four. East from Hades Five is Hades Four. West from Hades Five is Hades Five. [Note that there is intentionally no "inside from" definition.] Outside from Hades Five is Hades One. Northeast from Hades Five is Hades One. Northwest from Hades Five is Hades Three. Southeast from Hades Five is Hades Three. Southwest from Hades Five is Hades Two. Instead of going nowhere in Fiery Realm when the current action is going inside and the flaming sphere is at hand (this is the translate going in as entering the flaming sphere when it is present rule): try entering the flaming sphere instead. Section - Flaming Sphere (Hades_flameball) [Note that the original used a printed name of "Ball of flame" for this object and included the word 'ball' in its name property. This version modifies this thing to prevent conflict with the "ball of fire" backdrop. Also note that the Hades_flameball object is declared with the I6 'enterable' attribute, something usually disallowed for non-containers in I7. Although this can be forced in I7, the approach here converts it into a container to be consistent with how other similar situations have been addressed.] A fixed in place enterable container called a flaming sphere is in Hades Five. "In the center of the room is a [if the resurrections remaining of the player is at least 3]large[else if the resurrections remaining of the player is 2]medium-sized[else]small[end if] flaming sphere." The description of the flaming sphere is "It's rather hypnotic -- a perfect sphere made entirely of orange-red fire." Understand "perfect" or "hypnotic" or "orange" or "orange-red" or "ball" as the flaming sphere. Definition: a thing is hell-swept if it is in Fiery Realm and it is portable and it is not the player. To revive the player: decrement the resurrections remaining of the player; now the current hit points of the player is the maximum hit points of the player; now the steeple window is closed; [Specified in original, for unknown reasons.] say "You find yourself drawn into the flaming sphere. The ball of flame engulfs you completely, and you feel nothing as inky blackness surrounds you.[paragraph break]'You have revived him!' you hear a voice say.[paragraph break]You open your eyes. You are lying on a long wooden table in the Monastery's steeple. Several members of the Order are gathered around you, and Brother Joseph helps you to your feet.[paragraph break][one of]'We were able to bring you back to the world of the living,' he says, 'but I fear our powers are waning. Your quest continues!'[or]'We have once again managed to restore you to life,' he says, 'but the channel to the nether world grows more strained, and we may not succeed if we try again. You must be more cautious in your quest.'[or]Joseph regards you solemnly. 'We have succeeded a final time, but now the channel is closed, and no power we can muster will open it again. Do not fail us; you are our last hope.'[stopping][line break]"; let n be the number of hell-swept things; if n is at least one: now every hell-swept thing is on the long table; say "As the group files out, Joseph lingers at the door to address you: '[if n is one]That [otherwise if n is two]Those [otherwise]A few things [end if]came through with you,' he says, pointing to the table. Then he, too, departs, leaving you alone in the room."; otherwise: say "The group files out, leaving you alone in the room."; move the player to the Steeple Room. [placed last to avoid triggering a room description earlier] After entering the flaming sphere (this is the reborn in fire rule): revive the player. Volume - Debugging Aids - Not for Release Chapter - Standardizing Randomness - Not for Release Section - Seeding the Random Number Generator - Not for Release First when play begins (this is the standardize randomness for debugging builds rule): seed the random-number generator with 7777. Section - Resetting the Lab Door After jumping while in Engineering Labs (this is the reset lab door combo rule): randomize the lab door combination; say "(Lab door combo now: [lock combination of the lab door])[paragraph break]". Chapter - Assorted Shortcuts - Not for Release Section - Accelerating Knowledge of Chant Names - Not for Release After waving the prayer book (this is the test casting action rule): now the player wears the holy amulet; now every spell is known; now the prayer book records every simple spell; say "BOOM. All spells known." Section - Accelerating Loss of Lives - Not for Release After rubbing the player (this is the lives left now zero rule): now the resurrections remaining of the player is zero; say "You feel curiously mortal." Section - Bypassing Steel Wall - Not for Release After jumping in the presence of the steel wall (this is the test wall dispelling rule): now the mysterious passage is open; now the mysterious passage is described; remove the steel wall from play; say "BAM! Wall gone now." Section - Sealing Domed Chamber - Not for Release After jumping in Domed Chamber (this is the seal or unseal dome ceiling for testing rule): if the strange circular recess is closed: now the strange circular recess is open; say "(dome ceiling passage: open)[line break]"; otherwise: now the strange circular recess is closed; say "(dome ceiling passage: closed)[line break]". Section - Quantitative Easing - Not for Release After jumping in a GUS Station (this is the conjure a coin rule): now the player carries a random uncirculated coin; say "Hey, you found a coin in your pocket!" Section - Simulating Feeyuk - Not for Release After jumping in Barsap's Gambit (this is the pseudofeeyuk rule): now the player is gravity-resistant; say "GRAVITY RESISTANCE: ON!" Section - Simulating Impact of Fublio Bay Eruption - Not for Release After jumping when the player is in the small sailboat (this is the test post-eruption geography rule): say "VOOP! New geography!"; rework the bay geography. Section - Toggling Spell Blocking - Not for Release After touching the prayer book (this is the test spell blocking rule): if spellcasting-blocked is true: disengage spell blocking; say "[line break]"; otherwise: engage spell blocking; say "[line break]" Chapter - Convenience Items - Not for Release Section - A Name for Thiefway - Not for Release Understand "thiefway" as the thiefway. Section - Forgeries - Not for Release [The player carries a forged thing called a stock certificate. The player carries a forged thing called a doubloon.] Section - Lamp - Not for Release A lamp is in Statue Room. The lamp is lit. Chapter - State Inspection - Not for Release Section - Command manipulation check - Not for Release Command inspection is a truth state that varies. Last after reading a command when command inspection is true (this is the echo commands when command inspection active rule): say "(command = [player's command])". After searching the player (this is the toggle command inspection rule): if command inspection is false: say "(Will now echo finalized commands.)"; now command inspection is true; otherwise: say "(Will no longer echo finalized commands.)"; now command inspection is false. Section - Verifying carrying relation - Not for Release Instead of pushing the player (this is the show carrying relation rule): repeat with holded howsit running through things carried by someone: let which owner be a random person carrying holded howsit; say "[The holded howsit] [is-are] carried by [the which owner].[line break]". Section - Verifying expectant pauses - Not for Release [ When Expectant Pause begins (this is the inspect state for expectant pauses rule): say "(Expectant Pause started with question-poser=[question-poser of Expectant Pause] and replies:[paragraph break][5 spaces]Y = [positive rejoinder of active reply of Expectant Pause][line break][5 spaces]N = [negative rejoinder of active reply of Expectant Pause])[line break]". ] Section - Verifying wearing relation - Not for Release Instead of pulling the player (this is the show wearing relation rule): repeat with worn whatchamacallit running through things worn by someone: let which wearer be a random person wearing worn whatchamacallit; say "[The worn whatchamacallit] [is-are] worn by [the which wearer].[line break]". Chapter - Property Validation Routines - Not for Release Section - Animates Check - Not for Release [ When play begins (this is the show all animates rule): say "The living things are:[paragraph break]"; let lt be 1; repeat with peeked person running through people: say "#[lt] - [peeked person][line break]"; increment lt; say "[paragraph break]". ] Section - Backdrops Check - Not for Release [ When play begins (this is the show all backdrops rule): say "The backdrops are are:[paragraph break]"; let bd be 1; repeat with blessed backdrop running through backdrops: say "#[bd] - [blessed backdrop][if blessed backdrop is a distant view] (DISTANT VIEW)[end if][line break]"; increment bd; say "[paragraph break]". ] Section - Containers Check - Not for Release [ When play begins (this is the show all containers rule): say "The containers are:[paragraph break]"; let c be 1; repeat with certified container running through containers: say "#[c] - [certified container] ([size of certified container][if the certified container is a player's holdall], holdall[end if])[line break]"; increment c; say "[paragraph break]". ] Section - Dark Rooms Check - Not for Release [ When play begins (this is the double-check room lighting rule): say "The dark rooms are:[paragraph break]"; let dr be 1; repeat with peeked place running through dark rooms: say "#[dr] - [peeked place][line break]"; increment dr; say "[paragraph break]". ] Section - Essential Natures Check - Not for Release [ When play begins (this is the show all things by essential nature rule): say "The theoretically animal-like things are:[paragraph break]"; let al be 1; repeat with iterated item running through animal-like things: say "#[al] - [iterated item] ([if iterated item is off-stage]off-stage[else][location of iterated item][end if])[line break]"; increment al; say "[paragraph break]"; say "The theoretically vegetable-like things are:[paragraph break]"; let vl be 1; repeat with iterated item running through vegetable-like things: say "#[vl] - [iterated item] ([if iterated item is off-stage]off-stage[else][location of iterated item][end if])[line break]"; increment vl; say "[paragraph break]"; say "The theoretically fungus-like things are:[paragraph break]"; let fl be 1; repeat with iterated item running through fungus-like things: say "#[fl] - [iterated item] ([if iterated item is off-stage]off-stage[else][location of iterated item][end if])[line break]"; increment fl; say "[paragraph break]"; say "The theoretically mineral-like things are:[paragraph break]"; let ml be 1; repeat with iterated item running through mineral-like things: say "#[ml] - [iterated item] ([if iterated item is off-stage]off-stage[else][location of iterated item][end if])[line break]"; increment ml; say "[paragraph break]". say "The theoretically immaterial things are:[paragraph break]"; let im be 1; repeat with iterated item running through immaterial things: say "#[im] - [iterated item] ([if iterated item is off-stage]off-stage[else][location of iterated item][end if])[line break]"; increment ml; say "[paragraph break]". ] Section - Papery Check - Not for Release [ When play begins (this is the show all papery things rule): say "The papery things are:[paragraph break]"; let p be 1; repeat with pawed paper running through papery things: say "#[p] - [pawed paper][line break]"; increment p; say "[paragraph break]"; say "The non-papery things are:[paragraph break]"; repeat with proven paperless running through not papery things: say "#[p] - [proven paperless][line break]"; increment p; say "[paragraph break]". ] Section - People Check - Not for Release [ When play begins (this is the show all people rule): say "The people are:[paragraph break]"; let pp be 1; repeat with promptable person running through people that are not animals: say "#[pp] - [promptable person][if promptable person is unimportant] (UNIMPORTANT)[end if][line break]"; increment pp; say "[paragraph break]". ] Section - Portables Check - Not for Release [ When play begins (this is the show all portable things rule): say "The potentially portable things are:[paragraph break]"; let pt be 1; repeat with iterated item running through portable things that are not people: if the iterated item is part of something: do nothing; otherwise: say "#[pt] - [iterated item] (independent object[if the iterated item is worn by someone] worn by [random person wearing the iterated item][else if the iterated item is carried by someone] carried by [random person carrying the iterated item][else][end if], [if iterated item is off-stage]off-stage[else][location of iterated item][end if])[line break]"; increment pt; say "[paragraph break]"; say "The theoretically fixed in place things are:[paragraph break]"; let npt be 1; repeat with iterated item running through fixed in place things that are not people: if the iterated item is part of something: do nothing; otherwise: say "#[npt] - [iterated item] ([if the location of iterated item is nothing]off-stage[else][location of iterated item][end if][if the iterated item is a backdrop], backdrop[else if the iterated item is scenery], scenery[else][end if][if the iterated item is unimportant], unimportant[end if])[line break]"; increment npt; say "[paragraph break]". ] Section - Proper Names Check - Not for Release [ When play begins (this is the show all proper-named things rule): say "The proper-named things are:[paragraph break]"; let pnt be 1; repeat with tried thing running through proper-named things: say "#[pnt] - [tried thing][line break]"; increment pnt; say "[paragraph break]". ] Section - Room Connections Check - Not for Release To say debugging name of (X - an object): if X provides the property internal name and the internal name of X is not empty: say the internal name of X; otherwise: say the printed name of X. [ When play begins (this is the show rooms and connections rule): repeat with reviewed room running through rooms: say "Now checking: [debugging name of reviewed room], [if the map region of reviewed room is not nothing]in [map region of reviewed room][else](no region)[end if]...[run paragraph on]"; repeat with double-checked direction running through directions: let proposed destination be an object; now proposed destination is the room-or-door double-checked direction from reviewed room; if proposed destination is not nothing: say "[line break][5 spaces][double-checked direction] from [debugging name of reviewed room] is [debugging name of proposed destination]"; if proposed destination is a door: let proposed final destination be the other side of proposed destination from reviewed room; if proposed final destination is not nothing: say " (DOOR to [debugging name of proposed final destination])"; otherwise: say " (DOOR to )"; say "[paragraph break]". ] Section - Singular/Plural/Mass/Proper Check - Not for Release [ Last when play begins (this is the show all singular and plural naming rule): [must be after grammar revision rules] let sn be 1; say "The proper-named things are:[paragraph break]"; repeat with proper-namey running through proper-named things: say "#[sn] - [proper-namey] ([a proper-namey] / [the proper-namey] / '[The proper-namey] [is-are]...' / '[A proper-namey] [is-are]...')[line break]"; increment sn; say "[paragraph break]"; say "The mass-nouned things are:[paragraph break]"; repeat with mass-namey running through improper-named mass-nouned things: say "#[sn] - [mass-namey] ([a mass-namey] / [the mass-namey])[line break]"; increment sn; say "[paragraph break]"; say "The singular-named things are:[paragraph break]"; repeat with single-namey running through singular-named improper-named things that are not mass-nouned: say "#[sn] - [single-namey] ([a single-namey] / [the single-namey])[line break]"; increment sn; say "[paragraph break]"; say "The plural-named things are:[paragraph break]"; repeat with plural-namey running through improper-named plural-named things: say "#[sn] - [plural-namey] ([a plural-namey] / [the plural-namey])[line break]"; increment sn; say "[paragraph break]". ] Section - Sizes Check - Not for Release [ When play begins (this is the show things by size rule): say "Unsized items include:[paragraph break]"; let ui be 1; repeat with iterated item running through unsized things: say "#[ui] - [iterated item] [if iterated item is a container]-- CONTAINER! [end if]([if iterated item is off-stage]off-stage[else][location of iterated item][end if])[line break]"; increment ui; say "[paragraph break]"; let all-sizes be a list of numbers; repeat with x running through things: if x is sized: add the size of x to all-sizes; sort all-sizes; let compacted-sizes be a list of numbers; let first size be entry 1 of all-sizes; repeat with checked size running through all-sizes: if checked size is not listed in compacted-sizes: add checked size to compacted-sizes; otherwise: do nothing; repeat with current size running through compacted-sizes: say "[paragraph break]SIZE = [current size]:[line break]"; repeat with sized subject running through things: if the size of sized subject is current size: say "#[ui] - [sized subject] [if sized subject is a container]-- CONTAINER! [end if]([if sized subject is off-stage]off-stage[else][location of sized subject][end if])[line break]"; increment ui. ] Section - Watery Check - Not for Release [ When play begins (this is the show all watery containers rule): say "The watery containers are:[paragraph break]"; let wc be 1; repeat with humid holder running through watery containers: say "#[wc] - [humid holder] ([size of humid holder][if the humid holder is a player's holdall], holdall[end if])[line break]"; increment wc; say "[paragraph break]"; say "The non-watery containers are:[paragraph break]"; repeat with parched pouch running through not watery containers: say "#[wc] - [parched pouch] ([size of parched pouch][if the parched pouch is a player's holdall], holdall[end if])[line break]"; increment wc; say "[paragraph break]". ] Section - Action Types Check [This section just plain doesn't work.] [IMPDO] [To decide whether (tested action - an action name) is dependent on both light and touch: if tested action is an action requiring light and (tested action is an action requiring a touchable noun or tested action is an action requiring a touchable second noun): decide yes; otherwise: decide no. When play begins (this is the show action categories rule): let ac be 1; say "The actions requiring light and touch are:[paragraph break]"; repeat with tested action running through action names dependent on both light and touch: say "#[ac] - [tested action][line break]"; increment ac; say "[paragraph break]"; say "The actions requiring light only are:[paragraph break]"; repeat with tested action running through actions requiring light: say "#[ac] - [tested action][line break]"; increment ac; say "[paragraph break]"; say "The actions requiring touch only are:[paragraph break]"; repeat with tested action running through actions requiring touch: say "#[ac] - [tested action][line break]"; increment ac; say "[paragraph break]".] Chapter - Testing hypothetical situations - Not for Release Section - Multi-person recognition scenario - Not for Release [Bob is a man in Governor's Office. Bob recognizes the crystal sphere. Instead of querying Bob about the crystal sphere (this is the Bob should recognize the purple sphere but not anyone else rule): say "'Ayup. I reckon it's the finest crystal sphere I ever saw.'"; rule succeeds.] Section - Problems with emptying - Not for Release [An animal called a hermit crab is in the flower pot. Instead of taking the hermit crab when the hermit crab is in a container (this is the but this is my home rule): say "The hermit crab clings tenaciously to the inside of [the holder of the hermit crab], and won't be dislodged." A thing called a ball of sticky tape is in the flower pot. The ball of sticky tape can be glommed-on. To indicate the tape is stuck fast: say "The ball of tape is stuck fast to your hand." Instead of dropping the glommed-on ball of sticky tape (this is the ball of tape won't come off your hand rule): indicate the tape is stuck fast. Instead of inserting the glommed-on ball of sticky tape into something (this is the can't bypass tape by inserting it into something rule): indicate the tape is stuck fast. Instead of putting the glommed-on ball of sticky tape on something (this is the can't bypass tape by putting it on something rule): indicate the tape is stuck fast. After taking the ball of sticky tape (this is the taking sticky tape sticks it to your hand rule): now the ball of sticky tape is glommed-on; say "The sticky mess gloms on to your hand an in unpleasant manner."]